问题 jQuery:文本框keyup触发两次


我有一个文本框并分配了以下功能(它是唯一分配的功能):

txt.bind("keyup",function(event){
    if(event.keyCode==13)
    {
        var nu = $("#debug").html();
        nu+="<br>enter";
        $("#debug").html(nu);
    }
});

奇怪的是它实际上发射了两次,因此在我的调试窗口中显示“输入”两次。 有谁知道是什么原因造成的?


12889
2018-03-05 14:22


起源

在我的情况下,我使用扫描枪,它模拟每个类型字符的键盘键,所以我使用jquery检测工具, codepen.io/krissco/pen/XdywLo 解决了我的问题,它的核对时间是通过keup来区分正常的键盘:) - shareef


答案:


我知道这已经有一段时间了,但我很惊讶没有人建议:

txt.unbind();
txt.bind("keyup",function(event){
    if(event.keyCode==13)
    {
        var nu = $("#debug").html();
        nu+="<br>enter";
        $("#debug").html(nu);
    }
});

如果某种方式txt已经绑定,请致电 解除绑定 在你的新绑定应该修复它之前。当然,最好弄清楚为什么它被绑定两次。这恰好发生在我身上,因为我不小心把我的JavaScirpt文件包含了两次。召唤解除绑定帮助我确定问题所在。


4
2017-08-01 18:56





我发现自己 - txt.bind被分配了两次到文本框,所以它被解雇了两次。 这是一个错误吗?我认为绑定一个函数将始终只触发一次..嗯


3
2018-03-05 14:28



请按照之前的要求提供您的密码...我们发现:-) - Phil Rykoff
这不是一个错误,因为您可能需要在keyup上触发两个单独的函数。您在创建绑定时要小心。 - EndangeredMassa


我有同样的问题 - KEYUP 和 KEYDOWN 事件被触发两次,虽然他们的处理程序只绑定一次,我肯定只将它们附加到一个元素。

有趣的是,这种行为只能在Internet Explorer中观察到,并且只能在我的webapp显示在嵌入式ActiveX控件(CLSID_InternetExplorer)中的一种特殊情况下观察到。操作系统:Windows 7,IE 8,嵌入式ActiveX控件在IE7兼容模式下运行。

我找到了一个解决方法 - 处理jQuery 按键 事件,在我的webapp中也更具语义感。


2
2017-11-10 12:55



我可以确认问题是“keyup”事件相关,即使在(当前最新的)jQuery v3.3.1中也是如此。将其更改为“按键”可以解决问题。 - Zoltán Hajdú


我有类似的问题
发现具有指定键盘功能的对象位于另一个对象内
第一个是div第二个输入
发现keyup已分配给输入和具有此输入的div


1
2018-02-01 11:56





我有同样的问题。虽然我找不到解决方案,但我发现它触发两次的原因。

如果输入的文本为“@”,我正在处理事件。为此,我列出了每个按键。 要输入'@',您需要两个关键的前提(@ + shift),这就是它触发两次的原因。


1
2018-04-28 09:35



当你想到它时显而易见! :-) - toepoke.co.uk


有可能你的html元素在txt中被包含两次吗?

如果你提供html和分配javascript代码会很有帮助。


0
2018-03-05 14:29





这是我对同一问题的解决方法:

$('input').live('keyup keydown', function(e) {
    var thisKey = e.keyCode ? e.keyCode : e.which;
    if (thisKey == 13) {
        e.preventDefault();
        e.stopPropagation();
        if (e.type == 'keyup') {
            $(this).closest('form').submit();   
        }
    }
});

0
2018-06-27 16:07