2014-02-12 107 views
1

我想讓用戶按'ENTER'鍵進行搜索。爲什麼jQuery keyup會重複?

出於某種原因,當我多次使用回車鍵搜索時,我的程序開始對youtubeAPI進行重複呼叫,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'); 
     } 
    }); 
}); 

我做了一個小提琴,所以你可以測試一下:http://jsfiddle.net/Vna3Z/1/ 只需鍵入搜索,然後按回車鍵。然後再按一次進入。然後再次。你會明白我的意思。

有誰知道爲什麼?

回答

7

因爲您一次又一次地連接相同的事件處理程序。

每次搜索框獲得焦點(所以你.focus()處理程序運行),就意味着多了一個事件處理程序,因爲.keyup()用於在元件上附加一個事件處理程序keyup事件 - 每次你怎麼稱呼它,你連接一個更!

我不知道爲什麼你需要的.focus()處理程序,你可以簡單地做

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

或閱讀.off()

+1

很高興看到這個答案變得越來越大。它有助於解決現在的問題。 – ntgCleaner

+0

@ntgCleaner增量應答風格;)。 – kapa

+0

這就是爲什麼你有38.1k點;)我正在編寫這個答案的代碼,然後它說「1個新答案,點擊這裏刷新」 – ntgCleaner

0

簡單修復:只需使用one方法附加您的焦點事件。

... 

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

... 

jQuery的文檔:http://api.jquery.com/one

爲您的使用情況下,不需要focus處理器,雖然。無論如何,輸入元素只有在關注時纔會收到keyup事件。

+1

不幸的是,根本沒有必要有一個'重點'。上面的答案擺脫了焦點,並使其只是在特定元素的關鍵點上。 – ntgCleaner

相關問題