菜鳥教程:
oninput事件:HTML5標准事件
當用戶向<input>中嘗試輸入時執行JavaScript:
<input type="text" oninput="alert(123)" >
oninput事件在用戶輸入時觸發。
該事件在<input>或<textarea>元素的值發送改變時觸發。
提示:
該事件類似於onchange事件。不同之處在於oninput事件在元素值發送變化是立即觸發,onchange在元素失去焦點時觸發。另外一點不同是onchange事件也可以作用於<keygen>和<select>元素。
匯總:onchange事件與onpropertychange和oninput事件的區別:
1.onchange事件與onpropertychange事件的區別
onchange事件在內容改變(兩次內容有可能還是相等的)且失去焦點時觸發。
onpropertychange事件卻是實時觸發,即每增加或刪除一個字符就會觸發,通過js改變也會觸發該事件,但是該事件IE專有。(是嗎?我好像也在其他瀏覽器中用到了……)
2.oninput事件與onprototypechange事件的區別:
oninput事件是IE之外的大多數瀏覽器支持的事件,在value改變時觸發,實時的,即每增加或刪除一個字符就會觸發,然而通過js改變value時,卻不會觸發。
onpropertychange事件是任何事件屬性改變都會觸發的,而oninput卻只在value改變時觸發,oninput要通過addEventListener()來注冊,onpropertychange注冊方式跟一般事件一樣。(此處都是指在js中動態綁定事件,以實現內容與行為分離)
3.oninput與onpropertychange失效的情況
a.oninput事件:
a).當腳本中改變value時,不會觸發;
b).從瀏覽器的自動下拉提示中選取時,不會觸發。
b.onpropertychange事件:
當input設置為disable=true后,onpropertychange不會觸發。
CSDN: http://blog.csdn.net/freshlover/article/details/39050609
onchange事件只在鍵盤或者鼠標改變對象屬性,且失去焦點時觸發,腳本觸發無效;
onkeydown、onkeypress、onkeyup在處理復制、粘貼、拖拽、長按鍵(按住鍵盤不放)等細節上並不完善。
onpropertychange屬性可在某些情況下解決上面存在的問題,不用考慮是否失去焦點,不管js操作還是鍵盤鼠標手動操作,只要HTML元素屬性發生改變即可立即捕獲到。遺憾的是,onpropertychange為IE專屬的。其他瀏覽器下如果想要實現這一實時監聽的需求,就要用到HTML5中的標准事件oninput,不過IE9以下的瀏覽器是不支持oninput事件的。
二者結合:
a.對支持oninput的瀏覽器用oninput,其他瀏覽器(IE6/7/8)使用onpropertychange:
var testinput=document.createElement('input');
if('oninput' in testinput){
object.addEventListener('input',fn,false); //jQuery用多了,都記不太清楚JS了……
}else{
object.onpropertychange=fn;
}
b.