兼容ie的input事件

input事件很有用,但是ie不支持,不过可以通过propertychange 实现

但是也有缺憾就是,input元素的其他属性的改变也会触发propertychange 事件

所以ie用keydown来模拟最好

思路就是keydown后用setTimeout(function(){},0);获取keydown默认执行后的值,然后判断input的值改变没,改变的话就是input事件了

注意点

对于ie10.focus和blur事件也会触发input事件,这是不对的,解决方案就是

if(document.activeElement!=elem){
                return false;
            }
对于ie9,back键删除字符的时候,不能触发input事件,这也是不对的,那么对ie9就不能用input事件

下面是代码

bindInput:function(elem,callback){
    if("oninput" in document.createElement("div")){
       angular.element(elem).bind("input paste",function(event){
            if(document.activeElement!=elem){
                return false;
            }
            callback(event);
       });
    }else{
        elem.historyValue=elem.value;
        angular.element(elem).bind("keydown paste",function(event){
            setTimeout(function(){
                var isChange=false;
                if(elem.historyValue!=elem.value){
                    callback(event);
                    elem.historyValue=elem.value;
                }
            },0);
        });
    }
}




你可能感兴趣的:(兼容ie的input事件)