一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

js監聽表單value的修改同步問題,跨瀏覽器支持

想要實現的功能大概是這樣的:
有兩個文本框,其中一個只讀,另一個可以輸入。要求在可輸入文本框中輸入文本時,只讀文本框能夠獲得輸入的值,且只讀文本框旁邊出現提示信息,實時顯示只讀文本框的內容。
這個功能看是簡單,但其實并沒有想象的那么簡單。(注意,可輸入框的處理沒什么可討論的,關鍵是只讀框的處理)

一開始,我們一般會想到在只讀文本框上運用onchange事件。一試,發現onchange根本沒用,該事件是在文本框獲得焦點,然后內容改變失去焦點后才觸發的,現在在只讀文本框上根本沒有這些,它的內容是通過js改變的。于是,需要尋找另外的方法。

這時,在網上找到了onpropertychange事件。該事件在文本框屬性改變時觸發,不管是通過什么方式改變的。注意,是屬性改變,而不僅僅是value改變。一試,果然好使。然而,這個事件是IE專有的。WEB開發,必須得考慮瀏覽器的兼容問題。于是繼續摸索……

在網上有看到了另外一個事件:oninput。網上到處都是:fireFox中的該事件與IE中onpropertychange的事件等同。然而,我一試,發現根本不等同。oninput事件在fireFox中似乎沒有起作用。經過一段時間測試,終于明白,原來oninput并非與onpropertychange等同(網上到處到處亂轉貼,也不認真測試一下)。oninput只在用戶輸入值改變時觸發(即value改變),并非所有屬性改變時觸發,而且,通過js改變value時,oninput不會觸發。這下郁悶了。好不容易看到點希望,又再次陷入了失望,還好沒有絕望……哎,瀏覽器兼容問題真是麻煩。

左思右想,總有又有了眉目。對于fireFox等瀏覽器,可以通過定時器檢查只讀文本框的內容是否改變。測試后,終于大功告成。下面把代碼貼出來與大家分享。

在IE中的效果:

FireFox中的效果圖:

另外,我還在google Chrome測試也成功了(跟fireFox一樣的)。

HTML代碼:
復制代碼 代碼如下:
<table>
            <tr>
                <td>此處值通過js設置:</td>
                <td><input id="jsUserName" type="text" name="jsUserName" readonly/></td>
            </tr>
            <tr>
                <td>此處輸入值:</td>
                <td><input id="userName" type="text" name="userName"/></td>
            </tr>
        </table>

JavaScript代碼:
復制代碼 代碼如下:
$(function()
        {
            var jsUserName = "";
            if($.browser.msie)    // IE瀏覽器
            {
                $("#userName").get(0).onpropertychange = setJsUserName;
                $("#jsUserName").get(0).onpropertychange = handle;
            }
            else    // 其他瀏覽器
            {
                var intervalName;    // 定時器句柄
                $("#userName").get(0).addEventListener("input",setJsUserName,false);

                // 獲得焦點時,啟動定時器
                $("#userName").focus(function(){
                    intervalName = setInterval(handle,1000);
                });
                // 失去焦點時,清除定時器
                $("#userName").blur(function()
                {
                    clearInterval(intervalName);
                });
            }

            // 設置jsUserName input的值
            function setJsUserName()
            {
                $("#jsUserName").val($(this).val());
            }

            // jsUserName input的值改變時執行的函數
            function handle()
            {    
                // IE瀏覽器此處判斷沒什么意義,但為了統一,且提取公共代碼而這樣處理。
                if($("#jsUserName").val() != jsUserName)
                {
                    $("#toolTip").remove();
                    $("#jsUserName").parent().append("<span id='toolTip'>看到這里的信息表明,通過js改變input的值也能響應相應事件:<span style="color:red;" style="color:red;">" + $("#jsUserName").val() + "</span></span>");
                    jsUserName = $("#jsUserName").val();
                }
            }
        });

說明:為了方便,js代碼使用了jQuery。不使用是一樣的。
另外,考慮性能問題,可以考慮何時啟動定時器和清除定時器以及定時器延時時間。
總結:
1、onchange事件與onpropertychange事件的區別:
onchange事件在內容改變(兩次內容有可能還是相等的)且失去焦點時觸發;onpropertychange事件卻是實時觸發,即每增加或刪除一個字符就會觸發,通過js改變也會觸發該事件,但是該事件IE專有。
2、oninput事件與onpropertychange事件的區別:
oninput事件是IE之外的大多數瀏覽器支持的事件,在value改變時觸發,實時的,即每增加或刪除一個字符就會觸發,然而通過js改變value時,卻不會觸發;onpropertychange事件是任何屬性改變都會觸發的,而oninput卻只在value改變時觸發,oninput要通過addEventListener()來注冊,onpropertychange注冊方式跟一般事件一樣。(此處都是指在js中動態綁定事件,以實現內容與行為分離)
3、oninput與onpropertychange失效的情況:
(1)oninput事件:a). 當腳本中改變value時,不會觸發;b). 從瀏覽器的自動下拉提示中選取時,不會觸發。
(2)onpropertychange事件:當input設置為disable=true后,onpropertychange不會觸發。
如有問題或本人寫的不正確的地方歡迎聯系或指正。

JavaScript技術js監聽表單value的修改同步問題,跨瀏覽器支持,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 天天摸天天看天天爽 | 亚洲国产成人精彩精品 | 9l国产精品久久久久麻豆 | www.射射射 | www黄色大片 | 精品在线观看一区 | 黄色影片在线观看 | 看全色黄大色大片免费久久怂 | 免费精品在线视频 | 美女胸又大又黄的网站 | 手机在线亚洲 | 国产亚洲精品hd网站 | 久久老司机波多野结衣 | 精品一区二区视频 | 五月婷婷丁香色 | 麻豆一区 | 久久青草精品免费资源站 | 美女被免费视频网站九色 | 欧美大尺度无遮挡性视频 | 最新99国产成人精品视频免费 | www.色婷婷.com | 精品视频第一页 | 精品国产亚一区二区三区 | 色吧久久 | 四虎精品影视 | 亚洲欧美手机在线观看 | 久久精品国产线看观看亚洲 | 国产精品视频免费视频 | 日韩中文字幕精品久久 | 久久综合久| 国产成人精品免费视频大全办公室 | 美女视频黄.免费网址 | 久热福利 | 亚洲一区亚洲二区 | 日本在线观看www | 午夜色大片在线观看 | 国产亚洲欧洲精品 | 日韩一区二区三区视频在线观看 | 午夜国产福利 | 欧美精品做人一级爱免费 | 黄视频在线观看免费 |