2

JQueryonメソッドを使用して、イベント ハンドラーをウィンドウ オブジェクトにアタッチしています。

$(window).on('resize', function(e){
     /** my functional code goes here **/
     e.stopPropagation();
});

これは、イベント ハンドラーが複数回呼び出されている: これは、イベント ハンドラーが JQuery プラグインの初期化セクションにあるためです。そのため、誰かが次のようにプラグイン コンストラクターを呼び出すと、次のようになります。

$('selector').myPlugin({settings_1});
$('selector').myPlugin({settings_2});
$('selector').myPlugin({settings_3});

イベント ハンドラは 3 回アタッチされます。

offサイズ変更中にそれらの1つだけがトリガーされるように、3つのイベントハンドラーの1つを除いてすべてを識別して廃止する方法を探しています(メソッドを使用)。

イベント ハンドラーを特定し、必要なハンドラーを削除するにはどうすればよいですか?

4

3 に答える 3

0

イベント ハンドラーが (プレーンな JavaScript ではなく) jquery のみでアタッチされている場合は、この質問への回答を読んで、DOM 要素に既にイベント ハンドラーがあるかどうかを確認し、その場合は重複を避けてください。

于 2013-02-13T18:15:28.773 に答える
0

これを試して:

function myHandler(e){
     /** my functional code goes here **/
     e.stopPropagation();
}

$(window).on('resize', function (e){
    $(window).off('resize', myHandler);
    $(window).on('resize', myHandler);
});
于 2013-02-13T18:10:12.923 に答える
0

の配列を活用できます{key, callback}。このようなもの:

window.resizeCallbacks = [];

function addResizeCallback(key, callback) {
    window.resizeCallbacks.push({
        key: key,
        callback: callback
    });
}

function removeResizeCallback(key) {
    var index = -1;
    for (var i = 0; i < window.resizeCallbacks.length; i++) {
        if (window.resizeCallbacks[i].key === key) {
            index = i;
        }
    }
    if (index >= 0) {
        window.resizeCallbacks.splice(index, 1);
    }
}


$(function() {
    $(window).resize(function() {
        for (var i = 0; i < window.resizeCallbacks.length; i++) {
            window.resizeCallbacks[i].callback();
        }
    });
});
于 2017-01-13T12:11:53.393 に答える