在 Web 开发中有时候我们会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown、onkeypress、onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制、剪贴和粘贴这些操作,处理组合快捷键也很麻烦。因此在这篇文章向大家介绍一种完美的解决方案:结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化。
- oninput
oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发,不像 onchange 事件需要失去焦点才触发。oninput 事件在主流浏览器的兼容情况如下:
从上面的列表我们看到,oninput事件在大部分浏览器上都支持,只有在IE9之前不支持,那么怎么处理这些不支持的浏览器呢? - onpropertychange
针对不支持oninput的IE浏览器,我们利用事件onpropertychange来检测输入值变化。在监听到 onpropertychange 事件后,可以使用 event 的 propertyName 属性来获取发生变化的属性名称。
<script type="text/javascript"> function OnPropChanged (e) { if (e.propertyName.toLowerCase () == "value") { alert ("The new content: " + e.srcElement.value); } } </script>
最后,贴上完整实现实时输入检测的代码
<script type="text/javascript">
/**
* Add a handler to listen the input behavior on the specified element.
* ele: HTMLElement, the specified element to be listened
* handler: Function, the specified handler when the input changes.
*/
function addOniputEvent(ele, handler) {
var propertyChange = function (e) {
if (e.propertyName.toLowerCase() == "value") {
handler.call(window);
}
}
if(document.addEventListener){
ele.addEventListener('input', handler, false);
} else if (document.attachEvent) {
ele.attachEvent('onpropertychange', propertyChange);
} else{
ele.onPropertyChange = propertyChange;
}
}
</script>