Javascript捕获键关闭
我有一个包含许多字段的表单,当用户在任何字段中执行“双输入”时,Javascript捕获键关闭,javascript,Javascript,我有一个包含许多字段的表单,当用户在任何字段中执行“双输入”时,doSomething()应该会发生 下面的代码基本上可以正常工作,除了doSomething()被调用的次数与该字段中的字符数量相同。它应该只被调用一次,而如果我将“ABC”放在字段中,doSomething()将被调用3X。无论在字段中输入了什么,只需在2X Enter后调用一次 我(有点)理解它为什么会发生(keydown被调用了3次),但不知道如何修复它。我需要解除绑定吗?当e.keyCode不是13时,将计数器重置为0似乎
doSomething()
应该会发生
下面的代码基本上可以正常工作,除了doSomething()
被调用的次数与该字段中的字符数量相同。它应该只被调用一次,而如果我将“ABC”放在字段中,doSomething()
将被调用3X。无论在字段中输入了什么,只需在2X Enter后调用一次
我(有点)理解它为什么会发生(keydown被调用了3次),但不知道如何修复它。我需要解除绑定吗?当e.keyCode
不是13
时,将计数器重置为0
似乎没有什么区别
编辑--我正在使用2X空格字符进行测试,因为Enter试图在jsfiddle上提交表单。点击2X空格(在Chrome中)并检查您的控制台
$("#dynamicFields").on('keydown', 'input', function(e) {
var counter = 0
var field = $(this)
field.keydown(function (e) {
if(e.keyCode == 13) {
counter++;
if(counter == 2) {
console.log('twice!')
doSomething()
}
}
else {
counter = 0
}
})
})
您将两次附加到“keydown”事件,一次使用on()
,另一次使用keydown()
。你只需要做一次
由于要跟踪每个元素的计数器,因此可以使用调用在元素本身上跟踪计数器
// init counter to 0
$("#dynamicFields input").data('counter',0);
// bind to keypress event
$("#dynamicFields").on('keydown', 'input', function(e) {
// the input field
var $field = $(this);
// enter key?
if ( e.keyCode == 13 ){
// how many times?
var counter = $field.data('counter');
// increment it
$field.data('counter',++counter);
// do the stuff
if ( counter >= 2 ){
alert('well, you did it.');
}
} else {
// reset
$field.data('counter',0);
}
})
看到它在这里工作了吗。你能为它提供一把小提琴吗?另请参见并记住GiyFiddle添加的。使用空格代替回车键