定时器解决IE9中propertychange和input事件在拖拽、剪切、删除时无法触发

在做项目中,遇到了一个在IE9下的input框在拖拽、剪切、删除时无法触发change时,搜索了好久,发现是IE9的一个BUG。

参考文章:http://blog.csdn.net/cuixiping/article/details/7450542

所以写了一个定时器来动态的监听input的框中值的变化,当获取焦点时启动定时器,当离开焦点时关闭定时器。

实现代码如下:

 //IE9的一个BUG:propertychange和input事件在拖拽 / 剪切 / 删除时无法触发
    var myBrowser=BrowserType();
    console.info("myBrowser:"+myBrowser)
    if(myBrowser=="IE9"){
        $('input').each(
            function () {
                var self = $(this);
                var intervalName;
                self.focus(function(){
                    intervalName = setInterval(function () {
                        self.trigger("propertychange");
                    },300);
                });
                self.blur(function()
                {
                    clearInterval(intervalName);
                });
            }
        );
    }

此处设置了每300毫秒手动触发一下propertychange事件。

另外关于判断浏览器版本的代码是参考http://www.php.cn/js-tutorial-368364.html

附上代码:

function BrowserType()
{
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
    var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器
    var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器
    var isEdge = (userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1|| userAgent.indexOf("Windows NT 6.1; WOW64; Trident/7.0;")) && !isIE; //判断是否IE的Edge浏览器
    var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器
    var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器
    var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器

    if (isIE)
    {
        var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
        reIE.test(userAgent);
        var fIEVersion = parseFloat(RegExp["$1"]);
        if(fIEVersion == 7)
        { return "IE7";}
        else if(fIEVersion == 8)
        { return "IE8";}
        else if(fIEVersion == 9)
        { return "IE9";}
        else if(fIEVersion == 10)
        { return "IE10";}
        else if(fIEVersion == 11)
        { return "IE11";}
        else
        { return "0"}//IE版本过低
    }//isIE end

    if (isFF) {  return "FF";}
    if (isOpera) {  return "Opera";}
    if (isSafari) {  return "Safari";}
    if (isChrome) { return "Chrome";}
    if (isEdge) { return "Edge";}
}



你可能感兴趣的:(前端早读课)