jQuery 1.4.2 .focus()導致IE首次change事件失效

同事通報的Issue,花了好大功夫才找出問題點,特此記錄。

某網頁的<input id="x" type="text" />以jQuery掛上change事件,使用IE測試,卻出現第一次修改值後按Tab不會觸發change事件,第二次起change事件正常的情形。我另外加了document.getElementById("x").onchange = function() { ... };作為對照,發現使用onchange掛上的事件每次都如預期被觸發,但用jQuery $("#x").change(function() { ... });掛上的事件卻會漏掉第一次修改,推斷問題應與jQuery有關。

經反覆測試,整理出簡單的"Bug重現隨身包"並確認問題出在jQuery 1.4.2版,再加上<input>呼叫.focus()設定焦點,就會在IE瀏覽器中發生首次change事件失效的狀況。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>OnChange Not Fired Issue</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.js" 
            type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $("#a,#b").val("123").change(function () {
                alert(this.id + " changed");
            });
            $("#a").focus();
        });
    </script>
</head>
<body>
<input id="a" /><input id="b" />
</body>
</html>

以上網頁使用IE7/8(咦? 那IE6呢? 見文末補充)測試會出現首次change事件未觸發的狀況(用FF, Chrome, Safari則正常),若改用jQuery-1.3.2.js, jQuery-1.4.4.js或jQuery-1.5.js則不會有問題,結論是只有"jQuery-1.4.2 + IE"的組合才會出錯,建議更換為1.4.4版或1.5+版本的jQuery應該就能避開。

【不用管IE6了嗎?】

前陣子,微軟啟動了撲殺IE6的計劃,喊出口號: "是夠義氣的朋友,就該幫忙擺脫IE6!" XD (Friends don't let friends use IE6),網站將持續統計全世界IE6的殘存比例,台灣目前約還有10.7%,但我想這已構成充分理由,足以請堅持網站仍需支援IE6的客戶去呷賽正視世界潮流,我也決定以後射茶包時,對於IE6-Only Issue一律採取"無視"原則來響應。

Web Developer們,大家團結起來把IE6弄死吧!!

歡迎推文分享:
Published 09 March 2011 01:17 PM 由 Jeffrey
Filed under: , ,
Views: 12,627



意見

# jain said on 09 March, 2011 01:04 AM

在ie6死之前,會死多少業務人員的腦細及浪費的口水呢? XD

# ddttop said on 19 March, 2011 03:35 PM

微軟要先幫公務員洗腦才行

# 路人 said on 23 March, 2011 10:30 PM

IE 不好用,就放棄吧。現在有其他的瀏覽器可以取代IE.

# 路人甲 said on 11 April, 2011 11:55 AM

IE6 假賽

# BEAN said on 02 June, 2011 03:19 AM

小弟我也是有遇到跟版大的狀況一樣,不過用另一種方式,看起來是解決了!如下:

$('#' + _txtDurableYear_F).live('focusout', function () {

}

$('#' + _txtDurableYear_F).change(function () {

       $('_txtDurableYear_F).triggerHandler('focusout');

});

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<March 2011>
SunMonTueWedThuFriSat
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication