1. 程式人生 > >定時器解決IE9中propertychange和input事件在拖拽、剪下、刪除時無法觸發

定時器解決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";}
}


相關推薦

定時解決IE9propertychangeinput事件刪除無法觸發

在做專案中,遇到了一個在IE9下的input框在拖拽、剪下、刪除時無法觸發change時,搜尋了好久,發現是IE9的一個BUG。 參考文章:http://blog.csdn.net/cuixiping/article/details/7450542 所以寫了一個定時器來動態

linux資料夾的建立複製重新命名清空刪除命令查詢

在home目錄下有wwwroot目錄,wwwroot下有sinozzz目錄,即/home/wwwroot/sinozzz 一、目錄建立 在/home/wwwroot目錄下新建一個sinozzz123的資料夾 mkdir /home/wwwroot/sinozzz123 二、目錄複製

定時setTimeout/setInterval變量報錯:not defined 的解決方法

span cor .com ldo href log bug 上下 指正 首先聲明本人資質尚淺,如有錯誤,歡迎指正、共同提高。 -------------------------------------------------------------------------

iOS的三大定時 iOS開發定時經常會用到,iOS常用的定時有三種,分別是NSTime,CADisplayLinkGCD。

iOS開發中定時器經常會用到,iOS中常用的定時器有三種,分別是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 建立定時器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:

HTMLbuttoninput button的區別

sta ram window 除了 水平 其中 插入 而是 ext button和input button的區別 一句話概括主題:<button>具有<input type="button" ... >相同的作用但是在可操控性方面更加強大。 HTML

解決mysqllimitin不能同時使用的問題

但是 col ima 聚集 class mys mit table span 先給出數據表 CREATE TABLE `test_tb_grade` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` v

如何解決servletdaGetdoPost的亂碼問題

最近學習java web 看到一些不錯的東西,拿出來分享一下。以下程式碼純手打可能有錯誤,僅供參考! .使用Stirng 進行重新編碼: uname=new  String(uname.getBytes(“iso8859-1”),"utf-8");//

HTML5 完美解決javascriptiphone手機android手機複製文字到板問題

1.執行以下解決方案條件:(這個是原理)①執行復制方法時 所複製文字不能被任何 塊級元素和行內塊元素和行內元素遮蓋否則無效;(解決方案:將文字通過絕對定位或其他方式移除螢幕外)②ios中不能複製屬性值,只能複製文字元素節點;(解決方案:可以把文字顏色設成背景色就能達到隱藏看不見的效果不影響顯示);直接上程式碼

Windows定時Timer使用的注意事項

在任何語言任何作業系統下的開發中,定時器都是一個必不可少的功能,大部分的作業系統和語言都有內建的定時器介面可供呼叫。在windows API中有一組定時器相關函式,包括CreateTimerQueue、DeleteTimerQueue、CreateTimerQueue

定時實現超時傳送/接收定期檢測非活動連線

《Linux高效能伺服器程式設計》閱讀筆記: 1. socket的傳送/接收超時  在Linux網路程式設計基礎–socket常用選項中講道,socket選項SO_RCVTIMEO和SO_SNDTIMEO分別用來設定socket接收資料超時和傳送資料超時時間

spring整合quartz定時的專案,如何關閉不斷輸出的batch acquisition of 0 triggers ?

不斷輸出的batch acquisition of 0 triggers太鬧心了,嚴重影響了除錯效率,不能忍,經過查閱資料得出關閉方法。希望幫助更多的小夥伴。解決方法:在pom.xml中看看使用的是哪個

解決androidviewpager內嵌html滑動事件衝突

           這幾天專案迭代,有個大的板塊是整體套用H5來做。由於H5裡還有好多小模組,需要一個滑動切換的效果,而android端只是提供一個空的fragment,佔據著viewpager的一個板塊。最開始的效果滑動起來分外尷尬。。           解決思路是這

解決EasyUIDialog Uploadify 相互影響問題

由於現在開發的專案用到了EasyUI作為介面彈出層,但是在與Uploadify上傳外掛進行配合使用過程中出現了問題。 為了解決這個問題花費我好長時間,一直找不到解決的辦法。結果今天我在瀏覽EasyUI Dialog屬性過程中發現了“ modal ” 模式,其屬性值為bo

bootstrapcheckboxinput 在同一行input得到焦點不靈敏

如程式碼使用Bootstrap,實現checkbox和input在同一行的中的效果,但滑鼠在input的上方時,還是指標的狀態,input無法得到焦點。<div class="panel-body"> <div id="common-

解決LinuxSecureCRTPUTTY上UTF-8漢字亂碼問題

一,SecureCRT設定Options->Global options->General->Default session->Edit Default Settings->Terminal->Appearance->Characte

iOS 高效能定時解決方案2(商品打折倒計時)

1、上一篇 iOS 高效能定時器解決方案有缺陷,上一篇用的是代理設計模式,當離開當前介面時,代理就失效了,所以定時器的代理事件就不再執行,導致出錯。現在這篇進行了改進,用通知實現。 2、還是會有一個全域性定時器 import UIKit let NotifyUpdateT

兩種方法解決jstouchclick衝突問題

<1>直接清除touch事件document.removeEventListener("touchstart", self.pageLockHandler, false); documen

解決TimePickerDialogonTimeSet DatePickerDialogonDateSet執行兩次的問題

首先大家千萬別把Date寫成了Data     最近在寫Fragment的示例,在  new DatePickerDialog(getActivity(),new OnDateSetListener(

解決CentOS(67版本),/etc/sysconfig/沒有iptables的問題

name 命令 install star spa lib cep pro centos 6 一、Centos 6版本解決辦法: 1.任意運行一條iptables防火墻規則配置命令: iptables -P OUTPUT ACCEPT 2.對iptables服務進行保存:

argo的輸入輸出--outputinput輸出目錄或檔案到一步驟

轉載請註明出處: argo的輸入輸出–output和input輸出目錄或檔案到下一步驟 有部分場景需要使用output把目錄或者檔案傳遞到下一個步驟。 argo提供了兩種方式 一種是引數方式parameter 一種是元件方式artifacts 各自適用於不同的場景,引數方式是