3

基本的に「選択項目を削除」ボタンがあり、チェックボックスが選択されていない限り無効になります。ユーザーがチェックボックスをオンにしたらすぐに、クリックイベントハンドラーをこのボタンにバインドしたいと思います。

ユーザーがチェックボックスの選択を解除し、何も選択されていない可能性があるため、完全なイベントハンドラー関数を変数に格納し、チェックボックスがオンになったらすぐにバインドしたいと思いました。

問題は、このイベントハンドラー関数を変数に格納して、オブジェクトに最も簡単にバインドするにはどうすればよいかということです。

これまでは、これを使用して、イベントハンドラー(このオブジェクトに既に存在する)のバインドを解除してから、次のように再度バインドするだけでした。

$(my-selector).unbind('click', eventHandler);
$(my-selector).bind('click', eventHandler);

...しかし、その逆は決してありません。

4

4 に答える 4

5

私の提案は、別のルートに進むことです。イベントをバインドし、ページのライフサイクル全体にバインドしたままにします。イベントハンドラーで、関連するオブジェクトの状態を確認し、イベントをどう処理するかを決定します。これには、単に無視することも含まれる場合があります。

その背後には2つの理由があります。

  • シンプルでデバッグ可能に保つ
  • イベントの配信が非常に遅れて、イベントの開始時の状態がイベント配信の状態と同じではなくなったのを確認しました。つまり、バインドを解除した後(バインドされたまま開始されたため)、イベントが配信されます。 )。
于 2012-08-18T18:56:26.773 に答える
4

分かりますかわかりませんが、こういう意味ですか?

// eventHandler function
var eventHandler = function(event) {

   ... // do something

}

// bind eventHandler function to jQuery collection
$(my-selector).bind('click', eventHandler);
$(my-selector).unbind('click', eventHandler);
于 2012-08-18T18:56:10.410 に答える
0
var handlerFunc = function () {...}
$(my-selector).unbind('click', handlerFunc);
$(my-selector).bind('click', handlerFunc);
于 2012-08-18T18:56:22.147 に答える
0

変数を使用して、選択されているチェックボックスを次のように保存できます。

var checkboxHandler = {}

checkboxHandler.activateButton = function(){...};
checkboxHandler.deactivateButton = function(){...};
checkboxHandler.checkboxes_checked = {};
checkboxHandler.number_of_checked_checkboxes = 0;
checkboxHandler.checkboxClicked = function(event){
    if($(this).attr('checked')){
        var id = $(this).attr('id');
        if(checkboxHandler.checkboxes_checked[id]){
            // uncheck
            checkboxHandler.checkboxes_checked[id] = false;
            checkboxHandler.number_of_checked_checkboxes--;
        }else{
            // checked
            checkboxHandler.checkboxes_checked[id] = true;
            checkboxHandler.number_of_checked_checkboxes++;
        }
        if(checkboxHandler.number_of_checked_checkboxes>0){
            checkboxHandler.activateButton();
        }else{
            checkboxHandler.deactivateButton();
        }
    }
}

$('checkboxes').bind('click',checkboxHandler.checkboxClicked)

このように、チェックボックスを1回だけバインドし、バインド/バインド解除する必要はありません。

于 2012-08-18T18:59:12.810 に答える