我有一个 jQuery 对话框,它初始化热键如下:
<script type="text/javascript">
$(document).bind('keydown', '<%=(i+1)%>',function (evt) {
// do stuff
});
</script>
循环从 1 到 9...
问题是,如果您关闭对话框然后重新打开对话框。它不断重新绑定,因此当您按下“1”键时,它会运行两次、三次、四次等......它会不断增长。
我尝试杀死对话框上的键绑定关闭
$(document).unbind('keydown', '1');
$(document).unbind('keydown', '2');
$(document).unbind('keydown', '3');
$(document).unbind('keydown', '4');
$(document).unbind('keydown', '5');
$(document).unbind('keydown', '6');
$(document).unbind('keydown', '7');
$(document).unbind('keydown', '8');
$(document).unbind('keydown', '9');
但这没有效果。关于如何处理这个问题有什么想法吗?
Thanks
注意.unbind() http://api.jquery.com/unbind/不支持eventData
争论,这就是为什么你的解除绑定不起作用。
在我的脑海里,你有两种不同的方法。如果这些是唯一的文档级 keydown 绑定,您可以“完全”取消绑定,如下所示:
$(document).unbind('keydown'); // unbinds *all* keydown handers on the document
或者,您可以将 keydown 处理程序存储为非匿名函数,并保留引用以在关闭对话框时传回取消绑定:
function onkeydown(evt) {
// do stuff
}
$(document).bind('keydown', '<%=(i+1)%>', onkeydown);
// later, in the dialog's "shutdown" code:
$(document).unbind('keydown', onkeydown);
然而,当同一个函数被多次绑定时,我并不是 100% 肯定它是如何工作的。你最好消除eventData
并使用event.which
在事件处理程序中确定按下了哪个键(这样只需要绑定处理程序一次)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)