onkeydown、onkeyup、onclick、onchange、oninput、onpropertychange 的用法和區別
onkeydown、onkeyup、onclick
onkeydown 是按鍵按下時觸發;
onkeyup 是按鍵彈起時觸發;
onclick 是按鍵按下并彈起時觸發。
有一種情況,就是按住按鍵不放,此時會不斷地觸發 onkeydown,但 onkeyup、onclick 只是在抬起按鍵的時候觸發一次。
要實時檢測正在輸字的文本框中輸入了多少文字,怎么辦?
用 onkeyup 不可取!
如果按住按鍵不放,文字會一直輸進去,可是 onkeyup 只觸發一次。況且如果不是按鍵,是鼠標右鍵粘貼怎么辦?
用 onkeydown 不可取!
onkeydown 雖然會不斷地觸發,但是在它觸發的時候,文字還沒有輸入進去。
oninput, onpropertychange, onchange 的用法
onchange 觸發事件必須滿足兩個條件:
a)當前對象屬性改變,并且是由鍵盤或鼠標事件激發的(腳本觸發無效)
b)當前對象失去焦點(onblur);
onpropertychange 的話,只要當前對象屬性發生改變,都會觸發事件
oninput 是 onpropertychange 的非 IE 瀏覽器版本,支持 firefox 和 opera 等瀏覽器,但有一點不同,它綁定于對象時,并非該對象所有屬性改變都能觸發事件,它只在對象 value 值發生改變時奏效。
oninput、onpropertychange 是為了彌補 onchange 的缺陷產生的
oninput 是 Chrome 支持的,onpropertychange 是 IE 支持的。
使用 keydown keypress keyup change 等事件,都不能實時監聽input輸入框的變化,尤其是在手機上使用中文輸入法的時候,所以這時候需要用到 2 個事件 - “onchange ,onpropertychange ”。
jQuery
$('body').on('input propertychange', '#id_q', function () {
// do something
});
原生 javascript 方法
function $(id) {
return document.getElementById(id);
}
$('id_q').addEventListener('input', function () {
// do something
});
$('id_q').addEventListener('propertychange', function () {
// do something
});