-1

我写了一个代码。我的元素当前不存在。代码是

jQuery('a.feedSearchClear').on('click',function(evt){
  console.log('coming here');
  var intId = window.setInterval(function(){
   if(jQuery('#feedSortDropDownElement').parent().find('ul').find('a').length > 0) 
{     window.clearInterval(intId);
      jQuery(".feedSortMenuContainer").prepend(menu_html);
     reRenderMenu();

}
},1000);

});

当我点击该按钮时,它出现了。它没有显示控制台日志意味着没有调用方法。谁能解释为什么?

4

2 回答 2

1

发生的事情是您将绑定直接应用于所选元素:

$("a.example").on("click", do_stuff);

在上面,你说的是,“jQuery,找到a页面上所有的标签example,并应用这个click绑定”。您的问题是页面上还没有元素。

您可以通过将绑定放在祖先节点(层次结构更高的任何节点)上并让它为您处理事件来解决此问题。最简单的方法是使用body标签,如下所示:

$("body").on("click", "a.example", do_stuff);

现在,您在说,“jQuery,只要在标签中单击a具有类标签,就执行此操作”。examplebody

您基本上是在告诉 body 标签代表子节点侦听事件,即使该子节点当时不存在。

于 2013-09-11T16:34:13.163 回答
0

将事件委托给动态添加元素的级或委托给document

jQuery(document).on('click', 'a.feedSearchClear',function(evt){
  console.log('coming here');
  var intId = window.setInterval(function(){
    if(jQuery('#feedSortDropDownElement').parent().find('ul').find('a').length > 0) 
    {  
       window.clearInterval(intId);
      jQuery(".feedSortMenuContainer").prepend(menu_html);
       reRenderMenu();

     }
   ,1000);    
});

委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要,参考.

于 2013-09-11T16:30:31.543 回答