jquery停止为动态创建的元素工作

时间:2015-08-17 20:30:39

标签: jquery

我有一个锚标记,单击时显示更多项目,显示这些项目后会出现另一个锚点并再次折叠这些项目。我有这个脚本在锚标记中搜索名为evitd的属性中的字符串,当它找到值触发警报时,字符串值为('expand_collapse'),然后显示更多项目并显示折叠锚点,但脚本不是第二次工作,即使锚具有属性evtid,其值为'expand_collapse'。任何建议都将受到赞赏

$(document).ready(function(){
       $('.ms-cal-nav').each(function () {
       var $this = $(this);
       $this.on("click", function () {
             if ($(this).attr('evtid').indexOf('expand_collapse') > -1) {
            alert("hello");
     
             }
         });
    });
});
<div class="ms-acal-ctrlitem" _expand="expand"><a href="javascript:void(0);" class="ms-cal-nav" evtid="expand_collapse"><img border="0" width="9" height="7">7 more items</a></div>

1 个答案:

答案 0 :(得分:0)

jQuery documentation对如何做到这一点有很好的解释 - 他们称之为“委托事件”。您在一些静态祖先元素上注册您的侦听器(如body,但最好是更接近您要监视的元素),然后在后代元素上侦听事件。这使您可以处理动态添加元素的事件。

$(document).ready(function(){
  $('body').on('click','.ms-cal-nav', function () {
     if ($(this).attr('evtid').indexOf('expand_collapse') > -1) {
        alert("hello");
     }
  });
});

注意:我还删除了您的.each()电话,因为这是不必要的。