兼容所有浏览器的实时监听输入的解决方案(转)

  在 Web 开发中有时候我们会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown、onkeypress、onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制、剪贴和粘贴这些操作,处理组合快捷键也很麻烦。因此在这篇文章向大家介绍一种完美的解决方案:结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化。

  1. oninput

    oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发,不像 onchange 事件需要失去焦点才触发。oninput 事件在主流浏览器的兼容情况如下:


    从上面的列表我们看到,oninput事件在大部分浏览器上都支持,只有在IE9之前不支持,那么怎么处理这些不支持的浏览器呢?
  2. 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>

  转载自 使用 oninput & onpropertychange 监听输入框

posted @ 2014-11-27 22:23  奋起直追  阅读(257)  评论(0编辑  收藏  举报