2010-04-20 65 views
1

正如標題所示,我遇到了綁定到下拉選擇列表中的更改的問題 - 看起來「更改「不適用於IE(7或8),所以當我嘗試替代方法並使用」點擊「事件時,它可以在IE中使用,但在Chrome中無法使用!我在這裏錯過了很明顯的東西嗎jQuery選擇更改/點擊問題 - 更改在IE中不起作用,點擊在Chrome中不起作用

這裏是我的代碼:

//event handler for showing hidden form elements (also ensures only relevant hidden els shown) 
     //IE needs click event instead of change 
     $('.select_change').live("change", function(){ 
      //check if value is other 
      if ($(this).val() == 'other') 
       $(this).parent().find(".hidden").show(); 
      //if user changes select value from other then hide input 
      if ($(this).val() != 'other') 
       $(this).parent().find(".hidden").hide(); 
      return false; 
     }); 

下拉HTML如下:

<select id="title" name="title" class="validate[required,funcCall[validateNotDefault]] select_change" > 
<option value="default" selected="selected">Please choose from options</option> 
<option value="yellow">Yellow</option> 
<option value="black">Black</option> 
<option value="chocoloate">Chocolate</option> 

<option value="other">Other</option> 
</select> 

回答

1

change在IE瀏覽器仍然不能完全泡正確,你可以做到這一點在兩種情況下工作,但:

$('.select_change').live("change click", function(){ 
    $(this).parent().find(".hidden").toggle($(this).val() == 'other'); 
}); 

這仍然採用.live(),只是既響應事件......因爲你所做的一切都不會因一次或兩次開槍而受到傷害,在這種情況下這樣做可以。使用.toggle(bool)稍微簡化了一下邏輯,上面的內容稍微短了一點。

+0

感謝尼克 - 作品一種享受 - 並歡呼爲智能化代碼爲了我! – dan727 2010-04-20 21:51:24

1

嘗試使用$ .bind()或$ .change()代替。我以前沒遇到過這個問題。

$('.select_change').change(function(){ 
      //check if value is other 
      if ($(this).val() == 'other') 
       $(this).parent().find(".hidden").show(); 
      //if user changes select value from other then hide input 
      if ($(this).val() != 'other') 
       $(this).parent().find(".hidden").hide(); 
      return false; 
     }); 
+0

感謝您的回覆 - 問題是綁定更改事件與$ .live() - 似乎這是一個與IE的問題,因爲尼克Craver指出 – dan727 2010-04-20 21:43:50

0

我假設您使用.live()方法,因爲您可能在呈現文檔後添加更多選擇對象。否則.bind()或.change()應該滿足您的需求。因爲.live(「click」)將與IE一起工作,而.live(「change」)將與其他所有工作一起使用,所以.live會接受.live(「click change」),因爲.live會接受多個空間分隔的事件。

+0

問題是,如果僅在單擊選擇框時您可能不希望事件觸發。點擊下拉選擇選項。它不應該觸發與選擇其中一個選項相關的事件 – user460114 2012-04-10 22:49:30

0

要解決IE中的「更改」問題,我就是這樣做的。

這可能是一個problem with a race condition在IE中的輸入字段。通過創建一個單獨的線程來處理UI更改,onChange應該在IE中正確觸發。

我解決了類似的情況做我的變化處理程序中執行以下操作:

if (jQuery.browser.msie) { 
    setTimeout(DoSomeUIChange, 0); 
} else { 
    DoSomeUIChange(); 
} 

的DoSomeUIChange獲取一個單獨的線程解僱,所以消除了競爭條件。