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"