﻿# 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 事件 - 更正](/post/2010/09/05/jQuery-142-live-API-change-event-on-IE-part-2.aspx)

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

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

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

```javascript
$('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](http://api.jquery.com/live/) 頁面已經有人留言反應，我想之後的 jQuery 版本應該會修復。

**相關連結**

-   [.live() – jQuery API](http://api.jquery.com/live/)
-   [.delegate() – jQuery API](http://api.jquery.com/delegate/)
