我有以下jQuery代码:
$(document).on('focusout', '#element', function(e){
alert('test');
});
$(document).on('click', '#element_b', function(e){
$(document).off('focusout','#element');
/* do other stuff */
$(document).on('focusout','#element',function(){});
});
点击#element_b
时,绑定到#element
的事件应该下车然后重新开启,但由于某些原因,在它关闭后,它不会重新开启。如何重新开始?
答案 0 :(得分:0)
为了能够重新绑定处理程序,处理程序函数必须在重新绑定时可用于引用。要实现这一点,只需使用名称
定义处理函数function focusOutHandler(e) {
alert("test");
}
$(document).on("focusout", "#element", focusOutHandler);
然后你也可以在“点击”处理程序中引用该函数:
$(document).on('click', '#element_b', function(e){
$(document).off('focusout','#element');
/* do other stuff */
$(document).on('focusout', '#element', focusOutHandler);
});
现在,那就是说,在你的问题背景下,这种操作真的没有多大意义。当“click”处理程序代码正在运行时,“focusout”代码无论如何都不会运行。因此,在代码开头删除处理程序,然后在最后添加它将不会产生任何明显的影响。
答案 1 :(得分:0)
我个人会争论一种不同的方法,所以你可以停止修改绑定。而是更改匹配器,使其更具限制性。
$(document).on('focusout', '#element:not(.restricted)', function(e){
alert('test');
});
如果您选择了这样的选择器,那么打开或关闭它所需要做的就是向元素添加/删除restricted
类,或者为代理提供更严格的匹配器。