我写了一个代码。我的元素目前不存在。代码是
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);
});
当我出现时点击该按钮。它没有显示控制台日志意味着没有调用方法。谁能解释为什么?
答案 0 :(得分:1)
正在发生的是您将绑定直接应用于所选元素:
$("a.example").on("click", do_stuff);
在上面,您说“jQuery,在页面上找到a
类的所有example
标记,并应用此click
绑定”。您的案例中的问题是您还没有页面上的元素。
您可以通过将绑定放在祖先节点(层次结构上方的任何节点)并让它为您处理事件来解决此问题。最简单的方法是使用body
标记,如下所示:
$("body").on("click", "a.example", do_stuff);
现在,您说,“jQuery,只要在a
标记中点击类example
的{{1}}标记,就可以了这个东西“。
您基本上是告诉body标签代表子节点侦听事件,即使当时该子节点不存在。
答案 1 :(得分: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);
});
委派事件的优势在于它们可以处理来自的事件 稍后添加到文档中的后代元素。通过 选择一个保证在当时存在的元素 委托事件处理程序附加,您可以使用委托事件 避免频繁附加和删除事件处理程序reference。