我有一个文本框并分配了以下功能(它是唯一分配的功能):
txt.bind("keyup",function(event){
if(event.keyCode==13)
{
var nu = $("#debug").html();
nu+="<br>enter";
$("#debug").html(nu);
}
});
奇怪的是它实际上发射了两次,因此在我的调试窗口中显示“输入”两次。 有谁知道造成这种情况的原因是什么?
答案 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键,而且还一切都很好。