2010-08-23 63 views
3

我知道有多種方法可以選擇從使用jQuery特定選項:最正確的方式來選擇選項

  1. $select.val("someValue")
  2. $option.attr("selected", "selected")
  3. $select[0].selectedIndex = 1

假設你有選擇你希望被選擇的指數和它的價值,什麼是最正確的方式(從上面或其他)到m選擇它嗎?

通過「最正確」,我的意思是:

  1. 最佳實踐,如果有的話
  2. 將正確的設定值,使其與表單提交,並且可以使用任何上述檢索方法
  3. 任何其他原因,我就選擇了其他

回答

3

$ select.val(「someValue中」)

這很好,在通常情況下它是一個非multiple選擇,你沒有這兩個不同<option> s的相同value。如果是這樣的話,我會選擇這個最可讀的選項。

$選擇[0] .selectedIndex = 1

這是更直接的,所以稍微更快,且必須爲在那裏你有相同的值的多個選項的情況下是毫不含糊的。

如果你可能有一個multiple - 選擇,你必須得到/單獨設置每個選項的selectedness:

$select[0].options[1].selected= true; 

但是:

$ option.attr( 「選擇」, 「selected」)

通常不是最好的方法。 attr()的問題在於,如果訪問DOM屬性和HTML屬性就好像它們是相同的東西,試圖隱藏與您的不同之處是一件討厭的事情。在這種情況下,attr()將執行的操作是設置selected DOM 屬性,這是一個布爾值。所以attr('selected', true)會更有意義;作爲字符串值的'selected'也可以工作,但僅僅是因爲所有非空字符串值都是JavaScript中的「真理」。

如果你實際上是在這裏設置的HTML selected屬性,它不會對期權的selectedness的效果,因爲selected屬性實際上映射到defaultSelected財產,而不是selectedselected屬性反映用戶更改的運行時表單內容; defaultSelected反映文檔中包含初始選擇狀態的實際屬性。

(除IE外,由於缺省值的缺陷,以及在其他瀏覽器中,在某些情況下太複雜且容易混淆的情況下)。回家建議:不要嘗試設置selected來自腳本的HTML屬性作爲結果可能是不可預知的。使用DOM屬性。value/defaultValue對於輸入和checked/defaultChecked對於複選框/無線電也是如此。)

3

最常用的方法是$select.val("someValue")一個方法,這是在文檔中設置的值的官方方法因爲它會是最優化的一個,並且它們會影響性能領域。

對於#2,是的,它滿足這一點,對於#3 ...它很短,仍然使你的意圖非常明確。

也就是說,最快的方式,如果您設置了數千個選擇元素,則爲$select[0].selectedIndex = 1路由......您無法獲得比本機DOM屬性更快的速度。當設置一個值時(除非它有很多項目,在這種情況下再與.selectedIndex一起使用),速度應該如此之大,三者之間無關緊要。

1

正如Nick Craver提到的其中任何一個都可以工作,它確實取決於哪個最適合您的需求。

就個人而言,如果我需要速度我只是使用類似(未測試,只是一個例子):

var elem = document.getElementById('myselectid'); 
elem.options[1].value = 'some value' 

但是,你做這個失去的jquery好處。

例如,如果您需要根據模式進行很多更改,那麼您可以使用jquery來提供幫助,這將減少您需要編寫的未測試代碼的數量。你可以做一個很好的模式列表,你可以看看這個:http://www.myphpetc.com/2009/03/jquery-select-elements-tips-and-tricks.html

因此,在任何情況下都沒有最好的方法,這就是爲什麼在select元素中設置option的方法有很多種方法,但是如果您在此處提供用戶故事,那麼可以解釋具體的最佳做法。