2012-10-11 82 views
1

我有一個div(id = div_search_fields),其中我有幾個jQuery選擇下拉列表。附加到div我有一個按鍵捕獲監聽器,如果按下的鍵是回車鍵,通過單擊一個隱藏的提交按鈕提交所選的東西。jquery選擇 - 防止按鍵捕獲

$("#div_search_fields").keypress(function(e) { 
    if (e.which == 13) { 
     $("#hiddenSubmitButton").click(); 
    } 
}); 

出於某種原因,如果我剛纔所選擇的選項中選擇的下拉菜單中的一個永遠不會被調用這個監聽器。在「div_search_fields」DIV中,我還有一個簡單的文本輸入框,如果我剛剛在那裏輸入了文本,然後按Enter鍵,監聽器就會按預期觸發。

這一定要關注選定的下拉菜單,但我無法理解爲什麼?有任何想法嗎?

回答

1

據我所看到的Jquery選擇在按鍵事件是使用e.preventDefault(),所以它不會允許執行代碼。應該有一些你可以覆蓋的功能來實現你的目標,或者你可以乘坐e.preventDefault()。

+0

我只想要Enter鍵按下一個提交,如果指定div內的內容已被更改(有兩個這樣的div,每個都有自己的提交按鈕,所以我有一個單獨的監聽器,每個div監聽Enter鍵,然後點擊適當的提交按鈕)。如果我只有標準的HTML元素(下拉菜單,文本輸入),它一切正常。當我使用JQuery Chosen初始化下拉框時,它會中斷。它看起來不像你使用上面例子中選擇的JQuery? –

+0

你是對的。我沒有選擇使用JQuery。我目前正在看它。希望我能得到解決方案。目前我可以看到Jquery選擇在keypress事件中使用e.preventDefault(),因此它不允許執行ur代碼。應該有一些你可以重寫的功能來實現你的目標。 – PRP

+0

你是對的!它是在選中JavaScript中的keydown_checker函數,它捕獲我的按鍵並防止默認值。我評論說,線條和所有作品都很漂亮!如果您在上面編輯您的帖子來說明這一點,我會將其標記爲正確的解決方案......謝謝。 –

1

兩件事情:

  1. 如果在下拉式菜單中輸入被動態AFTER按鍵事件綁定生成的事件將不被綁定到那些元素。

  2. ID對於一個元素應該是唯一的。如果您想要將動作綁定到多個元素,請改爲使用類。

使用。對(),而不是:

$(".div_search_fields").on("keypress", function(e) { . . . }); 
+0

所選下拉列表在偵聽器連接到div之前被初始化。 「div_search_fields」是包含所有下拉列表的div上的唯一ID。 –