jQuery:文本框keyup触发两次

时间:2010-03-05 14:22:38

标签: jquery bind

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

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

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

8 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

我遇到了类似的问题 发现具有指定键盘功能的对象在另一个对象内 第一个是div第二个输入
发现密钥组已分配给输入和具有此输入的div

答案 4 :(得分:1)

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

如果输入的文字有&#34; @&#34;我正在处理该事件。为此我列出了每个按键。 输入&#39; @&#39;你需要两个关键的前提(@ + shift),这就是它触发两次的原因。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

以下是针对同一问题的解决方法:

$('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();   
        }
    }
});

答案 7 :(得分:0)

我什至尴尬地提到了这一点,但是我在文本框中键入了一个大写字母,因此释放我的Shift键正在引起键击事件的“第二次触发”。事实证明,这根本不是第二次开火,但这只是让我误以为这是为了  而。起初,我认为上面提到的解除绑定技巧根本不适合我,但确实如此。我希望这可以帮助像我这样的人做同样的事情。现在,我只是简单地确保我总是检查它,不仅是在处理事件时释放了Shift键,而且还一切都很好。