Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery在.load()之后多次调用我的live(“keydown”)事件_Jquery_Keydown - Fatal编程技术网

jQuery在.load()之后多次调用我的live(“keydown”)事件

jQuery在.load()之后多次调用我的live(“keydown”)事件,jquery,keydown,Jquery,Keydown,我有以下jQuery事件: $("#scanItem").live("keydown", function (e) { if (e.keyCode == 13) { e.preventDefault(); alert('hi'); } }); scanItem是我页面中的文本框 第一次加载页面时,一切正常。按enter键正好触发事件1次。但是,我有一个下拉列表,它将执行jQuery加载来重新加载div 重新加载div后,当我在文本框上按enter

我有以下jQuery事件:

$("#scanItem").live("keydown", function (e) {
    if (e.keyCode == 13) {
        e.preventDefault();
        alert('hi');
    }
});
scanItem是我页面中的文本框

第一次加载页面时,一切正常。按enter键正好触发事件1次。但是,我有一个下拉列表,它将执行jQuery加载来重新加载div

重新加载div后,当我在文本框上按enter键时,警报会触发3次


我已经为此绞尽脑汁好几个小时了。知道为什么会发生这种情况吗?

如果重新加载脚本,则每次都要添加事件处理程序

如果无法将脚本移出div,一个简单的解决方案是将其更改为不使用
live

$("#scanItem").on('keydown', function (e) {
要使其正常工作,必须确保代码位于
#scanItem
元素之后

所以这不会影响具有相同id的未来元素


顺便说一句,由于
live
已被弃用,并且现在已从新版本中删除,因此您确实应该直接(如此处)或通过委托(这使其功能等同于
live
)在
上使用

此脚本是否在重新加载的div中?BTW live已弃用(或已删除,具体取决于版本)。能否显示用于重新加载div的代码?可能有多个侦听器正在创建,但在重新加载时没有删除。显示下拉列表的jquery代码我相信如果有人持有该键,则
keydown
会多次触发。使用
keypress
@dystroy:是的,脚本被重新加载。这正是问题所在。我把脚本移到父视图,现在一切都很顺利。

$("#scanItem").unbind().on("keydown", function (e) {
    if (e.keyCode == 13) {
        e.preventDefault();
        alert('hi');
    }
});