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 = "<?php echo Yii::app()->createUrl(‘user/userManager‘) ?>";               }            }         });      }   }});

说明:

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

$(selector).bind(event,data,function)
$(selector).click(function)

[javascript] view plain copy

  1. $("#searchMoveVideoResult ul li").bind("click",function(){
  2. $(this).css("border","5px solid #000");
  3. });
  4. $("#searchMoveVideoResult ul li").click(function(){
  5. $(this).css("border","5px solid #000");
  6. });

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

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

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

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

[javascript] view plain copy

  1. $("#searchMoveVideoResult").delegate("ul li","click",function(){
  2. $(this).css("border","5px solid #000");
  3. });

[javascript] view plain copy

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

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

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

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

[javascript] view plain copy

  1. $("#searchMoveVideoResult ul li").live("click",function(){
  2. $(this).css("border","5px solid #000");
  3. });
3.on():适用于当前及未来的元素(比如由脚本创建的新元素)
$(selector).on(event,childSelector,data,function,map)

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

[javascript] view plain copy

  1. $("#searchMoveVideoResult").on("click","ul li",function(){
  2. $(this).css("border","5px solid #000");
  3. });

[javascript] view plain copy

  1. //下面这样写就是错的了,一定要把动态添加的元素放到on()方法里面才行。</span>

[javascript] view plain copy

  1. $("#searchMoveVideoResult ul li").on("click",function(){
  2. $(this).css("border","5px solid #000");
  3. });
4.onclick事件:动态添加数据时,就为元素绑定onclick事件

[javascript] view plain copy

    1. function searchMoveVideo(){
    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. var result=data.result;
    11. console.log(result);
    12. var html=result.title+"<br>"+result.tag+"<br>"+result.act+"<br>"+result.year+"<br>"                                          +result.area+"<br>"+result.dir+"<br>"+result.desc;
    13. html+="<br><img src=‘"+result.cover+"‘/><br>";
    14. html+=‘<ul style="list-style: none; float: left;">‘;
    15. var act_s=result.act_s;
    16. for(var i=0;i<act_s.length;i++){
    17. html+=‘<li style="float: left;" <span style="color:#cc0000;">onclick="showSource(this);"</span>><a target="_bla                                                nk"><img src="‘+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. });    }
时间: 2024-10-06 05:16:21

jQuery-为动态添加的元素绑定事件的相关文章

WEB前端技巧之JQuery为动态添加的元素绑定事件

jquery 为动态添加的元素绑定事件 如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上 可以用delegate来实现 .delegate( selector, eventType, handler ) 例如示例: $('someUlSelector').delegate('someLiSelector','click',function(){ //codes... //$(this) for the current jquery instance of

jQuery给动态添加的元素绑定事件的方法

jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这里介绍jQuery中如何给动态添加的元素绑定事件在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况 例如 1 <div id="testdiv"> 2 <ul></ul> 3 </div> 需要给<ul>里面动态添加的

jQuery对 动态添加 的元素 绑定事件(on()的用法)

从jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的(官方推荐)首选方法. 当浏览器下载完一个页面的时候就开始渲染(翻译)HTML标签,然后执行css.js代码,在执行js代码的时候就注册了相应绑定的事件,我们平常用jQuery给HTML标签绑定(单击)事件是一般这样写 $("#btnId").click(function () { //触发事件后 逻辑 });  但是对用js动态添加的元素 是无效的,即没有绑定单击事件,所以对于动态添加的标签需要用on()来

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

<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js"> </script> <script> $(document).ready(function(){ $("body").on('click','p',function(){ $(this).hide(); }); }); </script>

[jquery] 给动态生成的元素绑定事件 on方法

用底下的方法尝试了好多次都失败 $('.del').on('click',function(){ alert('aa'); })// 失败!! 终于在准备放弃前看到一篇博文说的方法 $(document).on("click",'.del',function(){ alert('aa'); }); // 成功!!

jQuery动态添加的元素绑定事件处理函数代码

jQuery动态添加的元素绑定事件处理函数代码 作者: 字体:[增加 减小] 类型:转载 有一段时间没用jquery了,今天又碰到这个问题.当时是知道有livejquery可以解决.但是我并不喜欢为了这个而另外加载一个. 我当时的处理方法是在添加的时候手工绑定事件处理函数.不过新版的jquery已经添加了这个功能.我们已经不需要为此烦恼了. 参考:http://api.jquery.com/live/ 以前我们定义事件,比如为元素定义单击事件是这样写的: 复制代码 代码如下: $('input'

如何用js为动态生成的元素绑定事件

今天在开发项目的时候,需要为用js动态生成的元素绑定一个click事件,但是在页面加载之前,这个元素不存在,没法获取这个元素,然后为其添加事件.查阅jquery api 发现可以用on()事件(注意:新版本的jquery已经把live()去除,现在用on()),为动态生产的元素绑定事件,然后触发该事件执行.比如下面一个例子: 假设我们要给div动态添加的span绑定click事件形成如下结果 x //做法如下: ("#choose_result").on("click&quo

jQuery获取动态添加的元素,live和on的区别

今天给大家说一下如果用jQuery获取动态添加的元素,通常如果你在网页上利用jQuery添加一个元素,那么用平常的jQuery获取元素的方法无效的获取不到的.可以用以下的方法获取动态元素!假设我们现在需要获取网页动态添加的div元素,并绑定click事件! 在jQuery1.9版本以前,可以用live方法: $('div').live('click' function () { // }); 在jQuery1.9版本以后,live方法被删除,用on方法来代替: 如果你用这样使用on方法的话,那么

Angular如何给动态生成的元素绑定事件

在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听. 举例来说: angular.module('myapp',[]) .directive('myText',function(){ return{ restrict:'A', template:'<div ng-click="hello()">Hi everyone</div>', link: