2011-06-20 54 views
2
$('#id').change(function() { 
    if ($('#id option:selected').val() == 'choice1') { 
        // do stuff 
       } 
    else if ($('#id option:selected').val() == 'choice2') { 
        // do different stuff 
       } 
}); 

所以這裏發生了什麼是在頁面加載時默認情況下選擇了choice1。當我將下拉菜單更改爲choice2時,第一次沒有任何反應。當我第二次將它改回到choice1時,它實際上讀取上一個選擇(choice2)中的值。所以就像在價值觀背後落後一步,就像它在變化發生之前取得的價值。jQuery .change()返回當前值,而不是發生更改後

任何提示將不勝感激!

非常感謝!

更新:感謝所有,但必須有其他的JS正在使用此網站的其他JS正在進行。我以前曾嘗試過.val(),它的行爲方式與選項完全相同:selected - 有一個迭代延遲,所以它在第一次選擇後開始工作,但後面一次。我以前見過這個問題,但我真的不記得我是如何修復它的。當我這樣做時,我必須回答我自己的帖子。感謝大家的迴應!

+2

這對我在Chrome中正常工作,你是否在這個小提琴中遇到這個問題? http://jsfiddle.net/BdNUA/ – pimvdb

+0

也許我錯了,但我讀的地方,jQuery緩存以前使用選擇器,所以如果$('#id選項:選擇')'先前使用,那麼它可能會拿起緩存值。這只是一個猜測,我會試着檢查事實。 –

回答

3

這可能會實現

$('#id').change(function() { 
    if ($(this).val() == 'choice1') { 
        // do stuff 
       } 
    else if ($(this).val() == 'choice2') { 
        // do different stuff 
       } 
}); 

你一個例子,http://jsfiddle.net/MdGex/

+0

+1,只需使用'.val()'。除非你打算多選,否則'.val()'是爲你設計的。 –

+0

忍者!好答案。 – Patricia

0

只使用$(this).val();而不是$('#id option:selected').val()

選擇框的val將是所選選項的值。

相關問題