oninput和onchange的區別


菜鳥教程:

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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM