3

さて、ボタンがあり、そのクリックハンドラーを有効/無効にしたいとします。

次のような関数を作成したいと思います。

var bar = [];
function storeHandlers(buttonID) {
    //I would like to store the click handlers in bar[buttonID]
}

function preventHandlers(buttonID) {
    storeHandlers(buttonID);
    //I would like to disable all the click handlers for button
}

function loadHandlers(buttonID) {
    //I would like to enable all the handlers loaded from bar[buttonID]
}

これは可能ですか?どうすればこれを達成できますか?

前もって感謝します

4

3 に答える 3

2

私が知る限り、要素の ID だけからイベント ハンドラーを保存/取得することはできません。ハンドラーの作成中にそれらを手動で保存する必要があります。on/offただし、次のようなハンドラーを使用できます

function preventHandlers(buttonID) {
    $('#'+buttonID).off('click',bar[buttonID]);
}

function loadHandlers(buttonID) {
   $('#'+buttonID).on('click',bar[buttonID]);
}

そして、あなたはそれらを次のように保存することができます

bar[buttonID] = function(event){

};

アップデート:

How to debug JavaScript/jQuery event bindings with Firebug (or similar tool)と here How to find event listeners on a DOM node when debugging or from the JavaScript code?の答えはここにありますが? 他の人は、すべてのイベントハンドラーを返すと言ってい.date('events')ますが、私はそれを機能させることができませんでした.

上記の方法で例を設定しました。次のリンクを確認してください

働くフィドル

于 2012-06-21T15:39:21.197 に答える
1

これを試してみてください:

function preventClick(buttonID) {
    $('#'+buttonID).data('events').saved_click = $('#'+buttonID).data('events').click;
    $('#'+buttonID).data('events').click = null;
}

function allowClick(buttonID) {
    $('#'+buttonID).data('events').click = $('#'+buttonID).data('events').saved_click;
}

それでおしまい!

jsFiddle の例: http://jsfiddle.net/cec6z/9/

于 2012-06-21T15:50:18.957 に答える
0

たぶん私は間違っていますが、次のようなjqueryオブジェクトからすべてのイベントコールバックを取得できるとは思いません

var handlers = $('#buttonId').unbind('click')
于 2012-06-21T15:44:59.210 に答える