3

このスレッドに従って、ボタンのクリックを無効/有効にしています .jQueryでイベントハンドラーを削除する最良の方法?

その考えは、 live() メソッドを使用してイベントを有効/無効にすることもできるということです。このコードで何が起こるかというと、たとえば .load-item などのタグ要素をクリックすると、無効になっているクラスがこの要素に追加されます。これにより、セレクターが要素と一致しなくなり、「無効な」クラスが削除されて .live() セレクターが再び有効になるまでイベントが発生しなくなります。

以下は私が出てきたもので、最初のボタンのクリックを無効にします。

$('.load-item:not(.disabled)').live('click',function(){


/* add a .current class to the target item */
$(this).parentsUntil('.column-global').addClass('current');

/* add .disabled class to each a tag in the .current element-div */
$('.current a').each(function(index) {
    $(this).addClass('disabled');
});

....

});

別のボタンをクリックすると、無効なクラスを削除する別の機能があります。

$('.button-return').click(function(){

    ...

    /* remove all the .disabled class if any exists */
    $('.current a').each(function(index) {
        $(this).removeClass('disabled');
    });

    ...

    /* remove all the .current class if any exists */
    $('.item-global').removeClass('current');



    return false;

});

無効クラスが削除されることを確認しましたが、最初のボタンはまだ元のクリック可能な状態に戻りません。

私は何かを逃したことがありますか - または live() は実際には一度しか生きませんか live() が私が取り組むべきものではない場合、より良い解決策はありますか??

ありがとう。

4

2 に答える 2

1

戻るボタンもライブイベントである必要があります

$('.button-return:not(disabled)').live("click",function(){...});

また、addClass()とremoveClass()を使用する場合、セレクターでそれぞれを使用する必要はありません。ただそれを呼んでください。

$('.current a').each(function(index) {
    $(this).removeClass('disabled');
});

これと同じです

$('.current a').removeClass('disabled');

編集済み

ライブイベントを戻るボタンに追加するときは、それが無効になっていないことを確認する必要があることに注意してください。

ここでは完全に機能します。簡単なデモです。 http://www.jsfiddle.net/Qax3n/

于 2010-11-04T02:32:14.640 に答える
0

HTML レイアウトまたは他の Javascript と関係があるはずです。次の作品: http://jsfiddle.net/EEJEh/

于 2010-11-04T02:56:33.987 に答える