javascript - 为什么 jQuery keyup 重复触发?

标签 javascript jquery jquery-events

我希望用户通过按 ENTER 键进行搜索。

出于某种原因,当我多次使用回车键进行搜索时,我的程序开始重复调用 YouTube API,即 2 组相同的 5 个视频。如果您再次点击 ENTER,它现在会返回 3 组 5 个视频...等等。

这是我允许 ENTER 键的方式:

//allow them start search by hitting enter key:
$("#youtube-headerContainer-searchBox").focus(function() {
    $(this).keyup(function(e) {
        if(e.which == 13) {
            startIndex=1;
            fetchVideos();
            console.log('enter key pressed');
        }
    });
});

我做了一个 fiddle ,所以你可以测试它:http://jsfiddle.net/Vna3Z/1/ 只需输入搜索内容,然后按 ENTER,然后再次按 ENTER。你会明白我的意思。

有人知道为什么吗?

最佳答案

因为您一次又一次地附加相同的事件处理程序。

每次搜索框获得焦点(因此您的 .focus() 处理程序运行),这意味着多了一个事件处理程序,因为 .keyup() 用于附加一个keyup 事件元素上的事件处理程序 - 每次调用它时,都会附加一个!

我不知道你为什么需要 .focus() 处理程序,你可以简单地做

$("#youtube-headerContainer-searchBox").keyup(function(e) {
    if(e.which == 13) {
        startIndex=1;
        fetchVideos();
        console.log('enter key pressed');
    }
});

或阅读 .off() .

关于javascript - 为什么 jQuery keyup 重复触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742292/

相关文章:

javascript - 使用 iron-ajax 作为 application/x-www-form-urlencoded 发布 json 对象

javascript - 在 HTML5 Canvas 元素内移动矩形(像素)区域的最快方法是什么

javascript - 使用 JS/jQuery 组合按键(Escape & Shift +Escape)

javascript - 使用 jQuery 在网页上捕获键盘

javascript - 通过触发和图片点击机制切换div

Javascript 多个正则表达式模式

javascript - 登录表单的输入验证是否过大?开销 + "too much javascript"问题

javascript - jQuery 无法识别 html 的更改

jquery - 内联 CSS 有效,但 Jquery CSS 不适用于同一元素

c# - 单选按钮值为空