我想知道哪种方法可以处理依赖于变量状态的事件。
现在,我有一个监听器,只有在选项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'
这样做的方法是什么? 感谢。
答案 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
)。您也可以使用标志而不是像我所示的解除绑定/绑定。