是否有原因导致脚本无法在稍后加载的元素上运行?

时间:2011-12-15 16:43:13

标签: jquery

我注意到容器内的一些jQuery按钮在初始页面加载完成后加载时不起作用。

For example, see this

底部的那些按钮:今天明天其他某天 工作,但只在开始时。

当您按顶部的导航按钮(例如场地),然后再次点击事件时,这些按钮将不再有效。 搜索页面上的按钮也没有。

这是我的代码,例如:

<a id="today_button" href="#" title="Click to show events for today"></a>



jQuery('#today_button').click(function() {   
    jQuery("#today_button").addClass("active");
    jQuery("#tomorrow_button").removeClass("active");
    jQuery("#some_other_day_button").removeClass("active");
});

另外,选择按钮:

<a id="choose_button" href="#" title="Click to search for club events!"></a>

jQuery('#choose_button').click(function() {   

    $('#whole-ajax-content-one').load('search2.html');

});

谢谢大家! :)

3 个答案:

答案 0 :(得分:2)

您应该在document对象上使用委托来获取动态元素。试试这个

$(document).delegate('click', 'anyValidSelector', function(){

});

使用最新的jQuery ver 1.7+,您可以使用on将事件处理程序附加到任何元素,即使它是动态创建的。

查看http://api.jquery.com/on/

答案 1 :(得分:1)

如果需要将事件附加到动态HTML元素,则应使用on事件处理程序。

如果您有以下内容:

jQuery('#choose_button').click(function() {   

试试这个:

jQuery(document).on('click', '#choose_button', function() {   

答案 2 :(得分:1)

动态添加的元素需要重新绑定到事件

使用live (deprecated)

$('#choose_button').live('click', function() { ...  });

delegate

$(document).delegate("#choose_button","click",function(){...});

on(1.7 +)

$(document).on("click","#choose_button",function(){...});