【发布时间】:2011-04-29 06:24:12
【问题描述】:
我已经附加了一些 live() 侦听器,以便自动对 url 中带有 ajax 的每个链接进行 ajax 调用:
$("document").ready(function() {
$('a[href^="/ajax"]').live('click', call);
});
function call(e, context, link) {
e && e.preventDefault();
link = link || this;
if(typeof link == "string" || !$(link).hasClass("disabled")) {
newObj(SPZ.AjaxCall, link, context);
}
};
但有时我想重写它(这样我就可以指定一个上下文来查找回调函数),所以我写了一个 jQuery 方法来做到这一点
$.fn.customAjax = function(context) {
return this.die().click(function(e){
call.call(this, e, context);
});
};
$(".save").customAjax(myObj);
我遇到的问题是,如果将实时处理程序添加到元素集合中,我不能只在其中一个元素上使用 die(); die() 似乎只有在你将它应用于所有使用 live() 的元素时才有效。
任何人都可以提出一个可以抑制 live() 事件的解决方法吗?顺便说一句,人们对于建议 jQuery 团队改变 die() 的行为以便它可以用于删除单个元素上的 live() 处理程序的意见是什么?有什么理由说明这是个坏主意吗?
【问题讨论】:
-
die()和live()一样,不需要在选择器之后直接调用吗?例如$('a[href^="/ajax"]').die()是正确的,但this.die()不是? -
这可能是 die() 限制的一个方面,但如果我将其替换为找到我瞄准的链接的选择器,它仍然会失败。问题是试图只为添加实时处理程序的元素的子集而死
标签: javascript jquery events live die