2

だから、私は簡単なものを持っています

$(document).on('#happyButton', 'click', function(event) {
    event.preventDefault();
    //more goes here... 
});

そして、それを次のようなものに変えたいと思います:

doStuff = function(event) {
    event.preventDefault();
    //more goes here...
}

$(document).on('#happyButton', 'click', doStuff(event));

このコードを別の場所に配置し、さらに重要なことに、これを別の場所で実行できるようにするには:

$(document).off('#happyButton', 'click', doStuff(event));

残念ながら、これは私にエラーを与えます:

Uncaught TypeError: Cannot call method 'preventDefault' of undefined 

さて、正解は「バックボーンを使う!」です。しかし、これは以前のコードのリファクタリングであり、すべてをリファクタリングする余裕はありません。簡単なこともできる

$('#happyButton').off()

必要に応じてそうしますが、よりクリーンなソリューションとして前者を好みます。

他のアイデアはありますか?ありがとう。

4

1 に答える 1

3

イベントは自動的に渡されます。

$(document).on('click', '#happyButton', doStuff);

function doStuff(event) {
    console.log(event.target);
    //event is available
}

そしてそれは:

.on(event, selector, handler)

いいえ:

.on(selector, event, handler)

と同じoff()

于 2013-03-20T01:11:23.950 に答える