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"