Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jquerykeyup会复制火?_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript 为什么jquerykeyup会复制火?

Javascript 为什么jquerykeyup会复制火?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我希望用户通过按“回车”键进行搜索 由于某些原因,当我多次使用enter键搜索时,我的程序开始重复调用youtubeAPI,即两组相同的5个视频。如果再次按ENTER键,它现在将返回3组5个视频…以此类推 下面是我如何允许ENTER键: //allow them start search by hitting enter key: $("#youtube-headerContainer-searchBox").focus(function() { $(this).keyup(functi

我希望用户通过按“回车”键进行搜索

由于某些原因,当我多次使用enter键搜索时,我的程序开始重复调用youtubeAPI,即两组相同的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');
        }
    });
});
我做了一把小提琴,你可以试一下: 只需键入搜索,然后按enter键。然后再次按enter键。一次又一次。你会明白我的意思的


有人知道为什么吗?

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

每次searchbox接收到焦点(因此您的
.focus()
处理程序运行)时,它意味着多了一个事件处理程序,因为
.keyup()
用于将事件处理程序附加到
keyup
事件的元素上-每次调用它时,您都会附加一个

我不知道您为什么需要
.focus()
处理程序,您只需执行以下操作即可

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

或者阅读。

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

每次searchbox接收到焦点(因此您的
.focus()
处理程序运行)时,它意味着多了一个事件处理程序,因为
.keyup()
用于将事件处理程序附加到
keyup
事件的元素上-每次调用它时,您都会附加一个

我不知道您为什么需要
.focus()
处理程序,您只需执行以下操作即可

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

或者阅读。

简单修复:只需使用
one
方法附加焦点事件

...

$("#youtube-headerContainer-searchBox").one('focus', function(){
    $(this).keyup(...);
});

...
jQuery文档:


不过,对于您的用例,不需要使用
焦点
处理程序。输入元素仅在被聚焦时才会收到
keyup
事件

简单修复:只需使用
one
方法附加焦点事件

...

$("#youtube-headerContainer-searchBox").one('focus', function(){
    $(this).keyup(...);
});

...
jQuery文档:


不过,对于您的用例,不需要使用
焦点
处理程序。输入元素仅在被聚焦时才会收到
keyup
事件

看着这个答案越来越大真是太好了。它现在有助于解决问题。@ntgCleaner增量应答样式;)。这就是为什么你有38.1k分;)我正在为这个答案编写代码,然后它说“1个新答案,点击这里刷新”@ NTGCuffor,当我是新来的,我看到一些人这样做,现在我已经习惯了,我不能做任何其他方式:)。谢谢;)看着这个答案越来越大真是太好了。它现在有助于解决问题。@ntgCleaner增量应答样式;)。这就是为什么你有38.1k分;)我正在为这个答案编写代码,然后它说“1个新答案,点击这里刷新”@ NTGCuffor,当我是新来的,我看到一些人这样做,现在我已经习惯了,我不能做任何其他方式:)。谢谢;)不幸的是,根本不需要“关注”。卡帕在上面的回答中去掉了焦点,使之成为特定元素的关键点。不幸的是,根本不需要“焦点”。卡帕在上面的回答摆脱了关注点,使其仅仅停留在特定元素的关键点上。