0

変数のステータスに依存するイベントを処理する適切な方法はどれだろうと思っています。

現在、オプションisTabletがtrueに設定されている場合にのみ追加されるリスナーがあります。(そうでないかのように、IEの古いバージョンでは壊れます)。したがって、次のようになります。

if(options.isTablet){
    document.addEventListener('touchmove', function(e){
      ....
    });
}

今、変数をセッターで動的に変更したい場合に問題が発生isTabletし、イベントが読み込まれませんtouchmove

$.fn.myPlugin.setIsTablet = function(value){
    options.isTablet = value;
}

簡単な方法は、常にイベントを追加し、その中でコードを実行するかどうかを決定することだと思います。

document.addEventListener('touchmove', function(e){
    if(options.isTablet){
        ....
    }
});

ただし、IE 8 ではエラーがスローされます。

オブジェクトはプロパティまたはメソッド「addEventListener」をサポートしていません

それを行う方法は何ですか?ありがとう。

4

1 に答える 1

1

一般的に、私は常にリスナーを追加し、内部の状態をチェックします。jQueryを使用しているため、エラーを回避するには、jQueryを使用してください。

$(document).on('touchmove', function(e){
    if(options.isTablet){
        ....
    }
});

非常に頻繁に呼び出されるハンドラーがある場合は、不要なときにオフにすることを検討できます。このようなもの:

function myHandler(e) { ... }

$.fn.myPlugin.setIsTablet = function(value){
    options.isTablet = value;
    if (value) {
        $(document).off('touchmove').on('touchmove', myHandler);
    } else {
        $(document).off('touchmove');
    }
}

ハンドラーを複数回バインドしないように注意してください (連続して複数回true送信された場合など)。setIsTablet私が示したように、バインド解除/バインドの代わりにフラグを使用することもできます。

于 2013-10-10T15:38:49.907 に答える