2010-09-16 39 views
8
<select> 
    <option>1</option> 
    <option>2</option> 
    <option class="test">3</option> 
</select> 

$('.test').attr('selected', 'selected');​ 

上面的選擇框將選擇第三個選項作爲默認值,沒有任何問題。 但是,如果使用Firebug檢查元素,則在選定的<option>內不存在任何selected="selected"屬性。jQuery無法通過attr()在<option>元素上設置「selected」=「selected」?

我知道這是不是一個大問題,因爲它仍然工作但我需要selected="selected"那裏,所以我的其他腳本可以捕捉到它並進行進一步的處理。那裏有什麼解決方法嗎?

謝謝。

回答

23

selected屬性不是對應於選項的當前選擇狀態。 selected屬性對應於默認選擇性,如果在表單上調用.reset()(或單擊了type="reset"按鈕),則該屬性將被恢復。當前選擇狀態可以使用DOM屬性selected訪問,而屬性反映的默認選擇在DOM屬性defaultSelected下訪問。

同樣爲value VS defaultValue<input type="text">/<textarea>checked/defaultCheckedtype="checkbox"/"radio"

jQuery的attr()被誤導地命名,並且它試圖假裝屬性和屬性是同一件事是有缺陷的。當您使用attr()時,您通常會訪問屬性而不是的屬性。因此,$(el).attr('selected', 'selected')實際上是在做el.selected= 'selected'。這是可行的,因爲'selected'與任何非空字符串一樣,都是'truthy':它被轉換爲el.selected= true。但是這在任何時候都不會觸及selected="selected"屬性。 (a)變得getAttribute/setAttribute錯誤,所以它訪問屬性而不是屬性(這就是爲什麼你不應該在HTML文檔中使用這些方法),(b)不正確地將當前表單狀態映射到HTML屬性,因此這些屬性確實出現在該瀏覽器中。

,但我需要選擇= 「選擇」 有

爲什麼?你是否將這個表格序列化爲innerHTML?這將不包括表單字段值(再次,由於錯誤在IE中除外),所以不是一種可用的方式來存儲字段值。

+0

+1以獲得最佳迴應。 – Jakub 2010-09-16 19:06:26

+0

謝謝。另一個腳本使用當前選定的選項(來自DOM),或者默認選項(如果尚未選擇任何內容以供進一步處理)。在閱讀你的迴應之後,爲了讓這個腳本選擇當前選擇的選項,我想正確的方法是將DOM屬性設置爲'selected'而不是使用'selected ='selected''? – user435216 2010-09-16 19:29:07

+0

是的。儘管在設置默認值時,某些瀏覽器也會*設置當前值的條件有限。 aaaargh! – bobince 2010-09-16 19:44:06

1

應該$('.test').attr('selected', true);​

<option selected>value</option>

它不會顯示爲selected="selected"

+0

我不認爲'selected'屬性的值很重要(它不一定是真的,它可以是任何值)。只是它存在的事實足以選擇它。 – letronje 2010-09-16 18:52:00

+0

@letronje:true,但是我只是遵循標準的jQuery格式'.attr(attributeName,value)' – Jakub 2010-09-16 18:55:08

+0

我的觀點是$('。test')。attr('selected','selected');也可以工作〜> http://jsfiddle.net/MZYN7/1/ – letronje 2010-09-16 18:56:39

相關問題