0

我附加了一些 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() 处理程序的意见是什么?有什么理由说明这是个坏主意吗?

4

2 回答 2

0

多玩一点,我发现在我的 jQuery 方法的末尾添加一个简单的 return false 就可以了。如果我想为同一次点击附加其他侦听器,这会导致问题,但现在可以了。

于 2010-10-22T16:39:10.553 回答
0

从哪里来call?我没有在此代码部分的某处看到它定义。

除此之外,我认为您this指的不是 jQuery 对象,而是 DOM 节点。尝试包装它:

$.fn.customAjax = function(context) {
    return $(this).die().click(function(e){
        call.call(this, e, context);
    });
};

$(".save").customAjax(myObj);

于 2010-10-22T16:24:06.533 回答