1

CSS クラスの存在に応じて関数を破棄しようとしています。

class を確認したいのですが.active、このクラスはボタンをクリックすることで切り替えられます。使ってみた

if(jQuery(#test).hasClass('.active')

しかし、クラス.activeの削除後に破棄したいのに、この関数がまだ実行されている場合は、一度しか機能しません。.active

私も試し.unbind()ましたが無駄でした。

.activeクラスを削除した後、この関数を完全に破棄する方法を教えてください

    function destroy_no_active_class(){
         jQuery('#test.active').mouseover(function (e) {
                e.stopPropagation();e.preventDefault();
                jQuery(this).addClass('highlight');
            }).mouseout(function () {
                jQuery(this).removeClass('highlight');
            }).click(function(e){
                e.stopPropagation();
                e.preventDefault();
                show_data(this);
            });

        });
   }
4

3 に答える 3

4

「関数を破棄する」とは、単に要素の強調表示を停止することを意味すると仮定すると、トリガーされたらハンドラー内でチェックし、条件付きでロジックを実行できます。これは、要素が再び「アクティブ」になると自動的に再び機能するため、ハンドラーのバインドを解除するよりも便利です。

function destroy_no_active_class(){
    jQuery('#test').on('mouseover.mine mouseout.mine', function (e) {
            if ($(this).is(".active")) {
                e.stopPropagation();
                e.preventDefault();
                jQuery(this).toggleClass('highlight');
            }
        }).on('click.mine', function(e){
            if ($(this).is(".active")) {
                e.stopPropagation();
                e.preventDefault();
                show_data(this);
            }
        });
    });
}

ハンドラー内で、代わりに行うこともできます

if (!$(this).is(".active")) {
    $(this).off('mouseover.mine mouseout.mine click.mine');
}

ここでの欠点は、要素が再びアクティブになった場合、ハンドラーを再バインドする必要があることです。( Note$は単に のエイリアスですjQuery。名前の競合がある場合は、上記のコードの をこれまでと同じように置き換えてください。jQuery)$

于 2013-07-24T04:30:15.037 に答える
1

.unbind() は、イベントの動作を削除する正しい方法です。

コードにエラーがあります。使用しているセレクターと、セレクターを引用符で囲む必要があるかどうかに注意してください。

if ($('#test').hasClass('active')) {
  $('#test').unbind().removeClass('active');
}
于 2013-07-24T04:30:27.647 に答える
1

私が質問を正しく理解していれば、イベント ハンドラーを使い終わった後に削除したいと思うでしょう。

その場合は、次のいずれかを行う必要があります

  1. イベントハンドラーを削除するときに渡すことができるように、ハンドラー関数への参照を保持します
  2. jQuery の event.namespace 機能を使用する

jQuery 1.7 以降では、イベント ハンドラーを追加する方法として on/off が推奨されています。

function myhandler(e) {…}

$('#test').on('click', myhandler);
$('#test').off('click', myhandler);
于 2013-07-24T04:35:56.050 に答える