2011-11-06 74 views
2

例如「活」 的版本在這裏:http://jsfiddle.net/Ltmbd/5/對DOM元素使用'。'進行Jquery操作在ID中沒有效果

 
<html> 
    <body> 
     <select id="some.list" > 
      <option value="1" >AAA</option> 
      <option value="2" >BBB</option> 
     </select> 
    </body> 
</html> 

和相應的JavaScript/jQuery的: ''

 
$(function() 
{ 
    $("select").each(function() 
    { 
     $(this).val("2"); 
    }); 
}); 

這應該在選擇列表中選擇 「BBB」(如果您刪除從ID「 some.list「,它按預期工作)。請注意,jquery FAQ提到了一個相關但稍有不同的問題。

顯而易見的答案是「不要在你的ID中放置一個」 - 但是我使用scaffolded(生成的)grails視圖,所以違背這個約定會有很多工作要做。

使用jquery 1.4.4

+6

你能更新你的jQuery版本嗎?小提琴似乎適用於1.4.4之後的所有版本。 –

+0

你是說即使你的jQuery選擇器沒有使用ID,就像你的例子'$(「select」)'和'$(this)',如果should-match元素有一個句號(「 。「)在其ID?或者只有當您嘗試按ID選擇時纔會出現問題:'$(「#some.list」)'? – nnnnnn

+0

我認爲詹姆斯的評論是正確的。看起來這是一個錯誤,他們修復了它。如果這絕對不是一種選擇,那麼你所能做的只是猴子補丁1.4.4來捕獲它們應用於解決問題的任何修復(但是如果你可以猴子修補它,爲什麼不升級?)。 –

回答

2

jQuery 1.4.4以上的版本將做的伎倆。 考慮更新您的jQuery版本並解決您的問題,謝謝。

這裏是最初報告的錯誤,案例是使用1.5版本解決的。

http://bugs.jquery.com/ticket/8021

+0

我沒有理由不升級,所以接受這個答案。 –

2

如果你要堅持的jQuery 1.4.4由於某種原因,使用selectedIndex更改選項值。它可以工作,即使在ID中有點。

this.selectedIndex = 1; //Select the second <option> 

小提琴:http://jsfiddle.net/Ltmbd/6/

或者,你可以使用:

this.selectedIndex = $(this).find('option[value=2]').index(); 

小提琴:http://jsfiddle.net/Ltmbd/10/

+0

感謝您的解決方法。還有其他的情況下,這個錯誤可能會導致我的問題(即不只是選擇一個列表中的項目),所以我會去升級,如其他答案中提到的。 –

0

我花了太多的時間在這個即使我想我說得對。 原來1.4.4版似乎有一個與此相關的錯誤。我回到了1.3.2以及更新的版本,這個工作。

4

這裏是解決問題的另一種方法。希望這可以幫助。

$(function() { 
    $("select").each(function() { 
     $(this).attr('selectedIndex', 1); 
    }); 
}); 

謝謝。

相關問題