oninput,onpropertychange,onchange的用法和區別

1、前言java

    因爲工做須要,需實現一個相似於微博輸入框的功能,在用戶動態輸入文字的時候,修改提示「您還能夠輸入XX字」。以下圖所示:瀏覽器

  

所以,稍微研究了一下oninput,onpropertychange,onchange的區別和用法,以及onpropertychange在ie瀏覽器下的一個bug。函數

2、oninput,onpropertychange,onchange的用法字體

l          onchange觸發事件必須知足兩個條件:this

    a)當前對象屬性改變,而且是由鍵盤或鼠標事件激發的(腳本觸發無效)spa

    b)當前對象失去焦點(onblur);firefox

l          onpropertychange的話,只要當前對象屬性發生改變,都會觸發事件,可是它是IE專屬的;code

l          oninput是onpropertychange的非IE瀏覽器版本,支持firefox和opera等瀏覽器,但有一點不一樣,它綁定於對象時,並不是該對象全部屬性改變都能觸發事件,它只在對象value值發生改變時奏效。orm

在textarea中,若是想捕獲用戶的鍵盤輸入,用onkeyup檢查事件就能夠了,可是onkeyup並不支持複製和粘貼,所以須要動態監測textarea中值的變化,這就須要onpropertychange(用在IE瀏覽器)和oninput(非IE瀏覽器)結合在一塊兒使用了。對象

3、代碼實現:

第一種方法是直接寫入textarea的onpropertychange和oninput屬性

<textarea id="wb_comment_content" name="wb_comment_content" onblur="blur_wb_textarea(this);" onfocus="click_wb_textarea(this);" onpropertychange="set_alert_wb_comment();" oninput="set_alert_wb_comment();" class="gary666" style="font-size:12px;" mce_style="font-size:12px;">歡迎您天天來微評哦……

若是想要用JavaScript設置textarea的屬性,需以下:

if(isIE)  
{  
    document.getElementById("wb_comment_content").onpropertychange = set_alert_wb_comment();  
}  
else //須要用addEventListener來註冊事件  
{  
    document.getElementById("wb_comment_content").addEventListener("input", set_alert_wb_comment, false);  
}

其他函數

function click_wb_textarea(obj){  
    if(obj.value==obj.defaultValue)  
    {  
        obj.value="";  
    }  
    //obj.className="";       //這樣設置類名在ie下會有在輸入第一個字符的時候onpropertychange不會觸發的bug  
    obj.style.color="#000";  
    return false;  
}  
function blur_wb_textarea(obj){  
    if(obj.value==""){  
        //obj.className="gary666";  
        obj.style.color="#666";  
        obj.value= obj.defaultValue;  
    }  
    return false;  
}

4、onpropertychange的bug

    在代碼實現時,發如今響應用戶onclick了textarea時,若是使用obj.className="XX";來改變textarea輸入框中字體的樣式,會致使在ie下會有在輸入第一個字符的時候onpropertychange不會觸發的bug,所以須要這樣設置:obj.style.color="#000";

相關文章
相關標籤/搜索