我已将此方法绑定到类.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);
});
});
失败在哪里?
答案 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);
});
});