0

URL に ajax を含むすべてのリンクに対して自動的に ajax 呼び出しを行うために、いくつかの live() リスナーをアタッチしました。

$("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);

私が抱えている問題は、ライブハンドラーが要素のコレクションに追加された場合、それらの要素の 1 つで die() を使用できないことです。die() は、 live() が使用されたすべての要素に適用した場合にのみ機能するようです。

live() イベントを抑制する回避策を提案できる人はいますか? 余談ですが、個々の要素の live() ハンドラーを削除するために使用できるように、jQuery チームが die() の動作を変更することを提案することについて、人々の意見は何ですか。これが悪い考えになる理由はありますか?

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 に答える