jQuery не может установить "selected" = "selected" через attr () на элементах?

<select>
    <option>1</option>
    <option>2</option>
    <option class="test">3</option>
</select>

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

в поле выбора выше будет выбран третий вариант по умолчанию без каких-либо проблем. , если вы проверяете элементы с Firebug нет selected="selected" атрибут присутствует в выбранном <option>.

Я знаю, что это не большая проблема, так как это все равно работает но мне нужно selected="selected" там, чтобы мои другие скрипты могли поймать его и выполнить дальнейшую обработку. Есть ли обходные пути?

спасибо.

3 ответов


на тут не соответствуют текущему состоянию селекционности опции. The selected атрибут соответствует по умолчанию selectedness, которые будут восстановлены, если .reset() называется (или type="reset" кнопка нажата) на форме. Текущее состояние selectedness можно получить с помощью свойства DOM selected, тогда как по умолчанию-selectedness, как отражено атрибутом, доступен под свойством DOM defaultSelected.

то же самое value vs defaultValue on <input type="text">/<textarea> и checked/defaultChecked on type="checkbox"/"radio".

в jQuery attr() ошибочно назван, и его попытки притвориться, что атрибуты и свойства-одно и то же, ошибочны. Когда вы используете attr(), вы обычно получаете доступ к собственности,не атрибут. Следовательно, $(el).attr('selected', 'selected') на самом деле el.selected= 'selected'. Это работает, потому что 'selected', как и с любой непустой строкой, это "истина": она преобразуется в el.selected= true. Но это ни в коем случае не касается .

IE еще больше усложняет эту уже запутанную ситуацию ,получая (a)getAttribute/setAttribute неправильно, поэтому он обращается к свойствам вместо атрибутов (поэтому вы никогда не должны использовать эти методы в HTML-документе) и (b) неправильно сопоставляет текущее состояние формы с атрибутами HTML, поэтому атрибуты действительно появляются в этом браузер.

но мне нужно выбрать= "выбран" там

почему? Вы сериализуете форму на innerHTML? Это не будет включать значения полей формы (опять же, за исключением IE из-за ошибки), поэтому это не полезный способ хранения значений полей.


Это работает, как ожидалось, проверьте это : http://jsfiddle.net/MZYN7/1/


Он должен быть!--0-->

и

<option selected>value</option>

Он не будет отображаться как selected="selected"