2011-03-18 151 views
0

我在input type='text'keyup發佈形式$.post的KEYUP調用時,點擊後反覆得到, 問題是該職位後,我在瀏覽器中點擊任何地方(甚至在Firebug控制檯)的該$.post將被重複提交的文本輸入

活動鏈接:http://mrgsp.md:8080/awesome/lookupdemo

(點擊一個按鈕打開一個彈出窗口,搜索點擊的東西后一個字母如「M」後[觀看螢火蟲控制檯])

腳本是這樣的:

$('#theform input:text').keyup(function (e) { 
     var w = e.which; 
     if (w < 9 || w > 45 && w < 91 || w > 93 && w < 112 || w > 185) 
      $('#theform').submit(); 
    }); 

$('#theform input:hidden').change(function() { 
    $('#theform').submit(); 
}); 

$('#theform').submit(function(e){ 
    e.preventDefault(); 
... 
$.post(...); 
}); 

UPDATE:只注意到沒有$('#theform input:hidden').change(...一切正常

更新2:明顯的文本框也觸發變化,奇怪因爲我註冊了input:hidden的更改不適用於input:text

更新3:解決,它看起來像我應該用input[type='hidden']代替input:hidden

回答

2

在某些瀏覽器中,更改事件(只?)火災時有問題的輸入失去焦點 - 這就是爲什麼你看到另一篇文章,當你點擊頁面上的其他地方。有關更多信息,請參閱this question - 這是關於單選按鈕,但更改/不重點行爲是相似的。

至於爲什麼文本框被綁定到更改事件::hidden選擇器確實是a few more things而不是隻選擇隱藏類型的輸入。在這種情況下,腳本運行時,文本輸入在頁面上不可見,因此它也被選中(因爲它被隱藏了!)。

如果您只想要選擇「true」隱藏輸入,您需要稍微醜陋的選擇器​​。

希望這會有所幫助!

PS:用JS won't trigger the change event更改輸入值。由於隱藏類型的輸入大概是,只有可以通過JS更改,所以您應該從更改隱藏值的位置調用$('#theForm').submit()