2011-01-31 62 views
1

在我的頁面上有我用jQuery綁定的html輸入(type = text)。當用戶按下Enter鍵或在更改值後離開文本框時,我想提交它(使用ajax)。可能使用jQuery進行'輸入'和'更改'的OR綁定?

我創建了一個「輸入」事件,因爲jQuery不提供一個。我其實是從這裏的一篇文章中得到的。它看起來像這樣:

$(document.body).delegate(":input","keyup",function(e){ 
    if(e.which == 13) 
     $(this).trigger("enter"); 
}); 

而我綁定像這樣做(已經「提交上輸入,或電平變化」的任何類):

$('.submit-on-enter-or-on-change').bind("enter change",function(){ 
    submitValue(this); 
)}; 

問題是當用戶按下「輸入」鍵並且值已更改,submitValue(this)被調用兩次!

有什麼辦法可以防止這種情況發生?一次提交一次就足夠了:)

+0

難道你的改變已經被調用了嗎?如果您使用表單,更改可能會經常被調用。例如:在textarea中按ENTER鍵調用`change`並調用`enter`。 – Marnix 2011-01-31 13:47:08

+0

@Marnix - 問題是變化IS被調用,隨着輸入。如果更改被調用,我想阻止'enter'觸發器。當用戶按下Enter時,IE不會調用onchange事件。 – Darcy 2011-01-31 14:17:34

回答

0

好吧,修復我的問題是簡單地刪除了「輸入」結合,只需使用「變化」。

顯然,IE在使用html內聯時不接受更改時的「輸入」鍵,但當您通過jQuery進行綁定時,它會工作。

<input type="text" onchange="submitValue(this)" /> 

不提交回車鍵。

0

會是這樣的工作嗎?

var submitted = false; 

$('.submit-on-enter-or-on-change').bind("enter change",function(){ 

    if (submitted) return; 

    submitted = true; 
    submitValue(this); 
)}; 
0

bind()方法的可選第三個參數是一個布爾值(當爲false時)從冒泡停止事件(因此處理器被調用兩次)。那是你需要的嗎?

更多信息:http://api.jquery.com/bind/