JQuery采用append添加的元素事件无效

使用jQuery动态加载html元素,但是元素上面又绑定了Click等事件,针对新添加的元素这些事件是无效的
部分代码如下:

  1. ………………  
  2.       
  3.                                 var history=“<ul><li class=’t’>” + scanType + “</li>”  
  4.                                 history+=“<li class=’p’>” + ‘发现了’ + scanFileNumber  + ‘个威胁’+ “</li>”  
  5.                                 history+=“<li class=’m’>” + scanTime + “</li>”  
  6.                                 history+=“</ul><li class=’s’><span data-dsp=buf>报告</span></li>”  
  7.                                 $(“.h_scan .dsp”).append(history);  
  8.                                 });  
  9.                          }  
  10.   
  11.                     });  
  12.                     }  
  13.                           
  14.                     $().h_add();  
  15.                           
  16.                     $(“.dsp .s span”).click(function(){  
  17.                           
  18.                         var $this=$(this).attr(“data-dsp”);  
  19.                           
  20.                         alert($this);  
  21.                         });  

发现点击后没任何反应也不报错,
后来改为为每个点击span加个id,断点去调试,发现取值居然是空的

  1. var history=“<ul><li class=’t’>” + scanType + “</li>”  
  2. history+=“<li class=’p’>” + ‘发现了’ + scanFileNumber  + ‘个威胁’+ “</li>”  
  3. history+=“<li class=’m’>” + scanTime + “</li>”  
  4. history+=“<li class=’s’><span id=’dsp_”+ scanTime +“‘ data-dsp=buf>报告</span></li></ul>”  
  5. $(“.h_scan .dsp”).append(history);  
  6. $(“#dsp_”+scanTime).click(function(){  
  7.   
  8.         var con=$(“#dsp_”+scanTime).attr(“data-dsp”);  
  9.   
  10.         alert(con);  
  11. });  

百度了一下:
而解决这个问题只需要修改一个地方就可以了:
var history="

  • " + scanType + "
  • "
    history+="

  • " + '发现了' + scanFileNumber + '个威胁'+ "
  • "
    history+="

  • " + scanTime + "
  • "
    history+="

  • 报告
  • "
    $(".h_scan .dsp").append(history);
    });
    }

    });
    }

    $().h_add();

    $(".dsp .s span").live("click",function(){

    var $this=$(this).attr("data-dsp");

    alert($this);
    });

    live方法

    live( type, fn )
    jQuery 1.3中新增的方法。给所有当前以及将来会匹配的元素绑定一个事件处理函数(比如click事件)。也能绑定自定义事件。
    目前支持 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup。
    还不支持 blur, focus, mouseenter, mouseleave, change, submit
    与bind()不同的是,live()一次只能绑定一个事件。

    这个方法跟传统的bind很像,区别在于用live来绑定事件会给所有当前以及将来在页面上的元素绑定事件(使用委派的方式)。比如说,如果你给页面上所有的li用live绑定了click事件。那么当在以后增加一个li到这个页面时,对于这个新增加的li,其click事件依然可用。而无需重新给这种新增加的元素绑定事件。

    on 方法

    但是随着jQuery的版本升级,自从jQuery 1.9及其以上已经无法使用live了,那么没有办法了吗,不是的,对于jQuery1.9版本及其以上可以使用on,其效果等同于live。

    未经允许不得转载:ganlei的个人博客 » JQuery采用append添加的元素事件无效

    赞 (3)
    分享到:更多 ()