The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

jQuery 1.4.2 的 .live() API 在 IE 無法套用 change 事件

今天幫同事除掉了一個 Bug,主要的問題在於他在網頁的某個下拉選單 ( <select> ) 使用 .live() API 套用change 事件,但客戶卻測出一個無法觸發 change 事件的狀況,不過同事之前都一律使用 Firefox 進行測試,所以一直沒發生問題過,但今天我用 IE8 測試後發現所有透過 live() API 註冊 change 的事件全部都不會執行,看來這應該是 jQuery 1.4.2 的 Bug 了,希望下一版能修復。

2010/9/5 更新文章,請參考新的文章jQuery 1.4.2 的 .live() API 在 IE 無法套用 change 事件 - 更正

主要的程式碼如下,使用上非常直覺,且大部分非 IE 瀏覽器都能正常使用,不過若使用  IE 瀏覽器就會導致事件永遠不會被觸發:

$('select[name="ddlSomething"]').live('change', function()
{
// ...
});

而我的解決辦法是透過註冊 click 事件 (因為這個 live 事件在 IE 可以用),然後在這個 live 的 click 事件再去註冊另一個 change 事件,不過為了避免 change 事件被重複註冊,所以必須要先檢查該事件是否已經被註冊過,如果已經註冊過就要跳過,否則同一個事件會被觸發很多���。

$('select[name="ddlSomething"]').bind('change',function() {
     // ...
}).live('change',function() {
     // ...
}).live('click',function() {
     if($.data(this, 'events') == null 
		|| $.data(this, 'events').change == undefined)
     {
         $(this).bind('change', function(){
		     // ...
         });
     }
});

我想這只是一個臨時的解決方案,而且這問題在 .live() – jQuery API 頁面已經有人留言反應,我想之後的 jQuery 版本應該會修復。

相關連結