0

我想知道哪种方法是处理取决于变量状态的事件的正确方法。

现在,我有一个监听器,只有在选项isTablet设置为 true 时才会添加它。(好像不是,它在旧版本的 IE 中中断)。所以它看起来像这样:

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

现在,如果我想isTablet使用 setter 动态更改变量并且它不会加载事件,我会遇到麻烦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');
    }
}

注意不要多次绑定处理程序(例如 if连续true发送setIsTablet多次)。您也可以使用标志而不是像我展示的那样取消绑定/绑定。

于 2013-10-10T15:38:49.907 回答