2015-06-26 31 views
1

我試圖在輸入字段的值發生更改時觸發函數。輸入字段是在燈箱廣告,所以我必須委派事件:在輸入字段上委託更改事件

var validateDonation = function(elem) { 
    var msg, 
     value = elem.value; 

    if (value == '') { msg = 'Please enter an amount'; } 
    else if(parseInt(value, 10) < 1) { msg = 'Please enter an amount greater than 1'; } 
    else if(parseInt(value, 10) > 100) { msg = 'Please enter an amount less than 100'; } 
    else { msg = ''; } 


    if(msg != '') { 
    console.log(msg); 
    } 
} 

$('body').delegate('#donation_amount', 'change', function(event) { 
    validateDonation(this); 
}); 

如果我使用keyup代替change控制檯日誌中工作得很好。但不是變化。爲什麼?

+0

你可以嘗試$( '身體')。在(」改變','#donation_amount',功能(事件){ validateDonation(this); }); – Sushil

+0

當輸入模糊並且應該觸發更改事件時,更改事件甚至不會觸發?或者事件在更改時觸發(輸入模糊),但是您希望事件在任何時候觸發輸入框的值立即發生變化? –

回答

1

https://msdn.microsoft.com/en-us/library/ms536912(v=vs.85).aspx

平變化:當內容是承諾,而不是當值改變這個事件。例如,在文本框中,用戶輸入時不會觸發此事件,而是當用戶通過保留焦點文本框來提交更改時。另外,當控件也失去焦點時,此事件會在onblur指定的代碼之前執行。

如果你想改變被即時更新,那麼你將要使用的oninput事件

oninput:DOM的輸入事件同步發射時<input><textarea>元素的值被改變。此外,它的內容發生變化時,它會引發可信的編輯。

對於IE不到IE9我相信你需要使用onpropertychange事件以及oninput來適應現代瀏覽器。

這裏向您展示事件觸發立即

http://jsfiddle.net/SeanWessell/9jfkcapp/

試試這個小提琴...

$('body').delegate('#donation_amount', 'input propertychange', function (event) { 
    validateDonation(this); 
});