jQuery Не можете установить "selected" = "selected" с помощью attr () для <option>элементов? - PullRequest
8 голосов
/ 16 сентября 2010
<select>
    <option>1</option>
    <option>2</option>
    <option class="test">3</option>
</select>

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

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

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

Спасибо.

Ответы [ 3 ]

23 голосов
/ 16 сентября 2010

Атрибут 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 из-за ошибки), поэтому не является пригодным способом хранения значений полей.

3 голосов
/ 16 сентября 2010

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

1 голос
/ 16 сентября 2010

должно быть $('.test').attr('selected', true);​

также

<option selected>value</option>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...