为什么类相关的onclick事件只触发一次?

时间:2012-01-23 22:24:04

标签: jquery

我已将此方法绑定到类.delete_filter的所有元素。 首先,我得到'data'属性,其中包含应该由方法调用的url。然后我调用一个没有做任何其他事情的脚本,然后用典型的“wait ... loading data”div替换正在重新加载的所有div。它工作得很好,但只有一次,我可以随时点击其他链接,没有任何反应,这让我发疯,我已经真的生气了!

$(".delete_filter").click(function() {
     url=$(this).attr('data');
     $.getScript("http://blabla.com/ajax/wait/filters:info", function() {
          $.getScript(url);
     });
});     

失败在哪里?

3 个答案:

答案 0 :(得分:2)

您更改了DOM,您要更改的Div可能包含您为其添加click事件的元素。

如果是这种情况,您应该使用on \ live \ delegate功能。
这些功能将会“工作”。对于当前呈现的元素和稍后将动态添加的元素也是如此。

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

on版本:

$("body").on("click", ".delete_filter", function(){
         url=$(this).attr('data');
         $.getScript("http://blabla.com/ajax/wait/filters:info", function() {
              $.getScript(url);
        });
    }); 

答案 1 :(得分:1)

将click绑定应用于类元素时,只会将其应用于运行代码时具有该类的元素。这意味着如果您要动态添加.delete-filter类,则必须再次运行代码。

答案 2 :(得分:0)

可能是由于jQuery缓存了请求/响应。每次点击都尝试更改网址。试试这个。

$(".delete_filter").click(function() {
     var url=$(this).attr('data');
     $.getScript("http://blabla.com/ajax/wait/filters:info?r=" + Math.random(), function() {
          $.getScript(url);
     });
});