3

我有以下 jQuery 事件:

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

scanItem 是我页面中的一个文本框。

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

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

我已经为此绞尽脑汁好几个小时了。任何想法为什么会发生这种情况?

4

2 回答 2

6

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

于 2013-02-06T20:47:23.103 回答
3

如果脚本被重新加载,那么您每次都在添加事件处理程序。

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

$("#scanItem").on('keydown', function (e) {

要使其工作,您必须确保代码位于#scanItem元素之后。

所以这不会触及具有相同 id 的未来元素。

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

于 2013-02-06T20:43:50.783 回答