jQuery-为动态添加的元素绑定事件

摘要:
˃";}}});}}});说明:在使用jQuery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件。像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是无效的,具体写法如下图。$.bind$.click[javascript]viewplaincopy$.bind;$.click;为动态添加的元素绑定事件有以下几种方式:1.delegate():向匹配元素的当前或未来的子元素附加一个或多个事件处理器$.delegate目前大多数jquery版本都可用,不过我一般不用它。

样例:

$("#modify_nick").click(function () {
$(this).css("display","none");
$("#nickname_span").empty();
var input = document.createElement("input");
$(input).attr("type", "text");
$(input).attr("id", "user_nick_id");
$(input).attr("name", "user_nick");
$(input).attr("maxlength", "20");
$(input).attr("value", "<?php echo $userinfo->nickname ?>");
$(input).appendTo("#nickname_span");
$(input).focusEnd();
});
$("#nickname_span").on("blur","input[name='user_nick']",function(){
var startVal = "<?php echo $userinfo->nickname ?>";
var endVal = $(this).val();
$("#modify_nick").css("display","block");
if(endVal != startVal){
if(endVal != ""){
$.ajax({
type: "GET",
url: "<?php echo Yii::app()->createUrl('user/modifyUserInfo') ?>",
data: {user_nick: endVal},
dataType: "json",
success: function (msg) {
if(msg == 666){
window.location.href = "http://t.zoukankan.com/<?php echo Yii::app()->createUrl('user/userManager') ?>";
}
}
});
}
}
});
说明:

在使用jQuery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件。像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是无效的,具体写法如下图。

$(selector).bind(event,data,function)
$(selector).click(function)
[javascript]view plaincopy
  1. $("#searchMoveVideoResultulli").bind("click",function(){
  2. $(this).css("border","5pxsolid#000");
  3. });
  4. $("#searchMoveVideoResultulli").click(function(){
  5. $(this).css("border","5pxsolid#000");
  6. });

为动态添加的元素绑定事件有以下几种方式:

1.delegate():向匹配元素的当前或未来的子元素附加一个或多个事件处理器

$(selector).delegate(childSelector,event,data,function)

目前大多数jquery版本都可用,不过我一般不用它。

[javascript]view plaincopy
  1. $("#searchMoveVideoResult").delegate("ulli","click",function(){
  2. $(this).css("border","5pxsolid#000");
  3. });
[javascript]view plaincopy
  1. $("#searchMoveVideoResult").delegate("click","ulli",function(){
  2. $(this).css("border","5pxsolid#000");
  3. });
看出它们的不同了吗,第二种写法是错误的,记住一定要把事件写在元素的后面。

2.live():为当前或未来的匹配元素添加一个或多个事件处理器

$(selector).live(event,data,function)

jquery1.8版本以前推荐使用该方法;jquery1.8版本之后就不建议使用了,我试了下,也是无效的,所以高版本的jquery推荐使用on()方法绑定事件。

[javascript]view plaincopy
  1. $("#searchMoveVideoResultulli").live("click",function(){
  2. $(this).css("border","5pxsolid#000");
  3. });
3.on():适用于当前及未来的元素(比如由脚本创建的新元素)
$(selector).on(event,childSelector,data,function,map)

试验了下,大多数版本的jquery都是支持这个方法的,也是我比较喜欢使用的方法。

[javascript]view plaincopy
  1. $("#searchMoveVideoResult").on("click","ulli",function(){
  2. $(this).css("border","5pxsolid#000");
  3. });
[javascript]view plaincopy
  1. //下面这样写就是错的了,一定要把动态添加的元素放到on()方法里面才行。</span>
[javascript]view plaincopy
  1. $("#searchMoveVideoResultulli").on("click",function(){
  2. $(this).css("border","5pxsolid#000");
  3. });

4.onclick事件:动态添加数据时,就为元素绑定onclick事件
[javascript]view plaincopy
    1. functionsearchMoveVideo(){
    2. $.ajax({
    3. type:"POST",
    4. url:"http://op.juhe.cn/onebox/movie/video",
    5. data:{"q":$("#moveVideo").val(),"key":"346f79df993776748b242236464d565d"},
    6. dataType:"JSONP",
    7. success:function(data){
    8. console.log(data);
    9. if(data.error_code=="0"){
    10. varresult=data.result;
    11. console.log(result);
    12. varhtml=result.title+"<br>"+result.tag+"<br>"+result.act+"<br>"+result.year+"<br>"+result.area+"<br>"+result.dir+"<br>"+result.desc;
    13. html+="<br><imgsrc='"+result.cover+"'/><br>";
    14. html+='<ulstyle="list-style:none;float:left;">';
    15. varact_s=result.act_s;
    16. for(vari=0;i<act_s.length;i++){
    17. html+='<listyle="float:left;"<spanstyle="color:#cc0000;">onclick="showSource(this);"</span>><atarget="_blank"><imgsrc="'+act_s[i].image+'"><br>'+act_s[i].name+'</a></li>';
    18. }
    19. html+='</ul>'
    20. $("#searchMoveVideoResult").html(html);
    21. }else{
    22. $("#searchMoveVideoResult").html(data.reason);
    23. }
    24. }
    25. });}

免责声明:文章转载自《jQuery-为动态添加的元素绑定事件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Hbase 建表基本命令总结UOS怎么安装Filezilla下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

axios的基本使用

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" href="https://unpk...

一个专门下载全球气象站数据的网站(包括中国700多个站)

我只是搬运工。。。 1.我也下载了,好像不能超过500M每次,100个站。下了也不会看。有没有高手能介绍下专门下载某个省的所有气象站气温资料的方法,从而计算出每个站每月的平均气温。。格式为txt。2 http://www.esrl.noaa.gov/psd/data/gridded/reanalysis/网站可以下载气象数据,.nc格式,同样不会用,不会打...

使用Kubeflow构建机器学习流水线

在此前的文章中,我已经向你介绍了Kubeflow,这是一个为团队设置的机器学习平台,需要构建机器学习流水线。 在本文中,我们将了解如何采用现有的机器学习详细并将其变成Kubeflow的机器学习流水线,进而可以部署在Kubernetes上。在进行本次练习的时候,请考虑你该如何将现有的机器学习项目转换到Kubeflow上。 我将使用Fashion MNIST作...

iframe+postMessage不同源页面通信

父页面 父页面运行在8080端口,通过iframe标签引用子页面,通过postMessage发送消息给iframe中的子页面。 <template> <div class="hello"> <iframe src="http://10.10.30.5:8081" height="100%"><...

selenium之元素定位-xpath

被测试网页的HTML代码 <html> <body> <div id="div1" style="text-align:center"> <img alt="div1-img1" src="http://www.sogou.com/i...

mongo分页查询,同时返回分页记录和记录数

今天做了一个mongo的分页查询,记录一下mongo如何同时返回分页记录和记录数的方法,利用的是mongo的聚合查询里面的$facet阶段,具体使用参考官方文档即可https://docs.mongodb.com/manual/reference/operator/aggregation/facet/ 按照官方文档的说法, Input documents...