onpropertychange与jQuery同时使用时在IE78产生的BUG

出处:http://www.cnblogs.com/gada/articles/4048836.html


今天用oninput和onpropertychange写了一个suggest,实现的自动填充功能,如下:

 

正常浏览器没有什么问题,那问题就来了,学挖掘机技术哪家强?阿不。。那个浏览器有问题呢?

答:IE7、IE8。如下图:

当载入页面的时候(没有做任何操作)这个默认隐藏的层自动出现了,我什么事件也没有触发啊!为什么?

其实原因有2:

1.onpropertychange的特性,这个事件在用户界面改变或者使用脚本直接修改内容两种情况下都会触发。

2.jquery在IE8以下要加这么一个东西

 

那如何解决呢?

我选择的时加一个延时定时器,等待JQ添加完属性后再绑定onpropertychange,当然不一定是最好的,希望大家找到好办法一起分享。

setTimeout(function(){
  input.attachEvent("onpropertychange", function(){
    callback.call(input);
    console.log("onpropertychange");
  });
}, 100);

 

如上我们可以看出这也不算是什么BUG,如果JQ不在页面载入后在input添加属性一点问题也没有,onpropertychange恰恰检测到了添加属性这一动作,最后造成IE7/IE8上图所示的BUG。

毕竟onpropertychange和oninput不一样,我们也没有办法吐槽,咳咳。。

而IE9以上却没有添加这个属性,所以没有触发这个onpropertychange事件,相安无事。

 

另外多提一下onpropertychange这个事件的坑:

在IE9下:

onpropertychange 事件在用户输入、退格(backspace)、删除(delete)、剪切(ctrl + x)、粘贴(ctrl + v)及鼠标剪切与粘贴时触发(在 IE9 中只在输入、粘贴、鼠标粘贴时触发)(仅 IE 支持)。

backspace、delete 两个按键的 keyCode 分别为 8、46。

oncut 事件在粘贴(ctrl + v)、鼠标粘贴时触发。

更详细请看司徒大大博文:http://www.cnblogs.com/rubylouvre/archive/2013/02/17/2914604.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值