Javascript 捕获按键

标签 javascript

我有一个包含许多字段的表单,当用户在任何字段中执行“双输入”时 doSomething() 应该发生。

下面的代码基本上工作正常,除了 doSomething() 被调用的次数与该字段中的字符一样多。它应该只被调用一次,而如果我在字段中输入“ABC”,doSomething() 会被调用 3X。只需在 2X Enter 后调用一次,无论字段中输入了什么。

我(有点)明白为什么会这样(keydown 被调用了 3 次)但不知道如何修复它。我需要解除绑定(bind)吗?当 e.keyCode 不是 13 时,将计数器重置为 0 似乎没有什么不同。

编辑 - http://jsfiddle.net/hzr8cezn/ - 我正在使用 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()。您只需执行一次。

由于您正在跟踪每个元素的计数器,因此您可以使用 data()调用以在元素本身上对其进行跟踪。

// 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);
    }
})

查看它在这个 jsFiddle 中的工作.

关于Javascript 捕获按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883419/

相关文章:

javascript - 如何在 D3.js 中垂直包装 SVG 中的文本?

javascript - 如何让我的 WordPress 网站在同一页面中显示博客文章,而无需使用 AngularJS 加载新页面?

c# - 使用 JavaScript 的服务器端是否确认消息框

javascript - 不等于 Javascript 中的表示法以在 jQuery 中使用

javascript - 消除 CSS 中 vendor 前缀的脚本

javascript - Eloquent Javascript : Can't understand how the number value is determined in the sum function

javascript - 调整 iframe 的大小以适应另一个页面

javascript - 如何为一堆静态文件创建纯浏览器/javascript 搜索引擎?

javascript - 使用 jquery 和 css 显示一个 div 的自定义属性

javascript - 算法的 Minimax 缓存更改结果?