zoukankan      html  css  js  c++  java
  • 时时监听input内容的改变

    心得:我们都知道input有一个change事件,但是是在input元素失去焦点的时候发生,不能时时的监听input内容的改变。

       刚开始的时候我是想用setInterval设置计时器的原理定时监听input内容的改变,但是结果差强人意,效果一点也不好,有时候操做过快还会出现undefined的情况。

    解决方法:通过阅读资料了解到input有意的input事件在大多当今主流的浏览器都能实现对input输入内容的时时监听;

        <input id="test"/>

        $("#test").bind("input",function(){console.log("内容变化了");});

        由于公司项目是兼容到IE10,还有火狐,谷歌浏览器,360是中国人可能用的比较多的浏览器,360浏览器在中文输入的情况下,按住shift+字母然后回车的方法输入大写字母,用keyup,keydown,keypress事件都不能获取当前变化的内容,而是之前的内容,input事件很好的解决了这一兼容性问题。

    但是,以上代码仅在除了ie的浏览器才work,那ie该怎么处理呢? 在ie中有一个属性叫做onpropertychange:

    <input id="test" onpropertychange="alert('change');" type="text" />

    经过调试后马上就会发现,这个属性是在元素的任何属性变化时都会起作用,包括我们这里所提到的value,但至少是起作用了,那接下来的任务就是筛选出property为value的变化。

    document.getElementById('test').attachEvent('onpropertychange',function(e) {
        if(e.propertyName!='value') return;
        $(that).trigger('input');
    });

    在上面代码中的回调函数中会传入一个参数,为该事件,该事件有很多属性值,搜寻一下可以发现有一个我们很关心的,叫做propertyName,也就是当前发生变化的属性名称。然后就相当简单了,只要在回调函数中判断一下是否为我们所要的value,是的话就trigger一下‘input’事件。

    然后,就可以在主流浏览器中统一用这样的方式来监听‘input’事件了。

    $('#test').on('input',function(){
        alert('input');
    })
    完整带代码:
    $('#test').on('input',function(){
        alert('input');
    })
    //for ie
    if(document.all){
        $('input[type="text"]').each(function() {
            var that=this;
    
            if(this.attachEvent) {
                this.attachEvent('onpropertychange',function(e) {
                    if(e.propertyName!='value') return;
                    $(that).trigger('input');
                });
            }
        })
    }
  • 相关阅读:
    常见限流算法
    spring aop 事物
    Java序列化和反序列化为什么要实现Serializable接口
    java类在何时被加载?
    mysql 排序 是怎么工作的?
    程序员转正述职报告
    .NET中使用Channel<T>
    .NET-服务承载系统(Hosting)(支持Cron表达式)
    JObject拼接Json字符串
    NET5 使用FTP发布
  • 原文地址:https://www.cnblogs.com/lguow/p/9580616.html
Copyright © 2011-2022 走看看