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添加的。使用空格代替回车键