我有一个包含多个字段的表单,当用户在任何字段doSomething()
中执行“双输入”时,应该会发生。
下面的代码基本上可行,除了doSomething()
被调用的次数与该字段中的字符一样多。它应该只被调用一次,而如果我在字段中放置“ABC”,doSomething()
被称为3X。无论在现场输入什么,只需在2X Enter后调用一次。
我(有点)理解为什么会发生这种情况(keydown被称为3次),但不知道如何解决它。我需要unbind
某事吗?当0
不是e.keyCode
时,将计数器重置为13
似乎没有任何区别。
编辑 - http://jsfiddle.net/hzr8cezn/ - 我正在使用2X SPACE bar字符进行测试,因为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
}
})
})
答案 0 :(得分:3)
您将使用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);
}
})
附加“keydown”事件两次。你只需要这样做一次。
由于您要跟踪每个元素的计数器,因此您可以使用data()
调用在元素本身上跟踪它。
{{1}}
请参阅此jsFiddle。