Атрибут selected
не , а соответствует текущему состоянию выбранности опции. Атрибут selected
соответствует выбранной по умолчанию , которая будет восстановлена при вызове .reset()
(или нажатии кнопки type="reset"
) в форме. Текущее состояние выбранности можно получить с помощью свойства DOM selected
, тогда как к выбранной по умолчанию, отраженной атрибутом, можно обратиться через свойство DOM defaultSelected
.
То же самое касается value
против defaultValue
на <input type="text">
/ <textarea>
и checked
/ defaultChecked
на type="checkbox"
/ "radio"
.
jQuery attr()
назван неверно, и его попытки притвориться атрибутами и свойствами - то же самое, что ошибочно. Когда вы используете attr()
, вы обычно получаете доступ к свойству, не атрибуту. Следовательно, $(el).attr('selected', 'selected')
фактически делает el.selected= 'selected'
. Это работает, потому что 'selected'
, как и для любой непустой строки, является «правдивым»: оно преобразуется в el.selected= true
. Но это ни в коем случае не касается атрибута selected="selected"
.
IE еще больше усложняет эту и без того запутанную ситуацию тем, что (а) ошибочно получает getAttribute
/ setAttribute
, поэтому он обращается к свойствам вместо атрибутов (вот почему вы никогда не должны использовать эти методы в документе HTML), и ( б) неверное отображение текущего состояния формы на атрибуты HTML, поэтому атрибуты действительно отображаются в этом браузере.
но мне нужно выбрать = "выбрано" там
Почему? Вы сериализуете форму в innerHTML
? Это не будет включать значения полей формы (опять же, кроме как в IE из-за ошибки), поэтому не является пригодным способом хранения значений полей.