文本框的属性监测
之前很簡單的認為對input的value監測就用2個事件可以搞定兼容性,知道我看了司徒正美的這篇博客,還是感慨自己不夠深入,接觸的太少。
對于IE全系列,可以采用onpropertychange屬性監測
對于 gte?IE9 和W3c瀏覽器,則通過input事件進行監測。
但是IE9的兼容性可能會出現問題。
oninput?事件在用戶輸入、退格(backspace)、刪除(delete)、剪切(ctrl?+?x)、粘貼(ctrl?+?v)及鼠標剪切與粘貼時觸發(在?IE9?中只在輸入、粘貼、鼠標粘貼時觸發)。
onpropertychange?事件在用戶輸入、退格(backspace)、刪除(delete)、剪切(ctrl?+?x)、粘貼(ctrl?+?v)及鼠標剪切與粘貼時觸發(在?IE9?中只在輸入、粘貼、鼠標粘貼時觸發)(僅?IE?支持)。
? 所以可以這樣實現。
input = document.getElementById('input');if(input.addEventListener){input.addEventListener('input',fn,false); }else{input.attachEvent('onpropertychange',function(e){
if(e.propertyValue == 'value'){
fn();
}
}); }if(window.VBArray && window.addEventListener && !window.WebSocket){input.addEventListener('keyup',function(e){var code = e.keycode || e.charcode;if(code==8 || code==46){fn();} },false) ;input.oncut=function(){fn()}; }
? 另外,如果對不僅僅對文本內容進行監聽,而且要相應修改,那么對于實現input事件的瀏覽器而言,沒什么
問題,而對于IE的propertychange事件,則應該有所注意--為了避免循環處罰該事件,需要在修改屬性之前將onpropertychange
處理程序取消,屬性修改完畢之后重新賦值:
下面是一個簡單的強制輸入大寫字母的demo,來源自David Flanagan
1 function forceToUpperCase(element) { 2 if (typeof element === "string") element = document.getElementById(element); 3 element.oninput = upcase; 4 element.onpropertychange = upcaseOnPropertyChange; 5 6 // Easy case: the handler for the input event 7 function upcase(event) { this.value = this.value.toUpperCase(); } 8 // Hard case: the handler for the propertychange event 9 function upcaseOnPropertyChange(event) { 10 var e = event || window.event; 11 // If the value property changed 12 if (e.propertyName === "value") { 13 // 避免循環觸發事件 14 this.onpropertychange = null; 15 // Change the value to all uppercase 16 this.value = this.value.toUpperCase(); 17 // 重新添加處理函數 18 this.onpropertychange = upcaseOnPropertyChange; 19 } 20 } 21 }
?
轉載于:https://www.cnblogs.com/accordion/p/4110696.html
總結
- 上一篇: 闪蒸烘干机铰刀最耐磨的是哪种材质?
- 下一篇: 集体智慧编程 - 构建价格模型