事件取决于jQuery的动态变量

时间:2013-10-10 14:28:19

标签: javascript jquery jquery-plugins

我想知道哪种方法可以处理依赖于变量状态的事件。

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

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

现在,如果我想使用setter动态更改变量isTablet,我会遇到麻烦,而且它不会加载事件touchmove

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

我想简单的方法是总是添加事件并在其中决定是否执行代码:

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

但在IE 8中抛出错误:

  

Object不支持属性或方法'addEventListener'

这样做的方法是什么? 感谢。

1 个答案:

答案 0 :(得分: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)。您也可以使用标志而不是像我所示的解除绑定/绑定。