jquery удалить "выбранный" атрибут опции? - PullRequest
37 голосов
/ 01 ноября 2011

Почему это не работает в IE8 для отмены выбора всех параметров в многострочном окне выбора?

$("#myselect").children().removeAttr("selected");

Есть ли обходной путь? Ничто из того, что я мог придумать (attr ("selected", "") и т. Д.), Похоже, не работает.

ОБНОВЛЕНИЕ: Вот обновленный jsFiddle. У меня есть , по крайней мере, получил его ухудшить, так что в IE8 выбран первый вариант. Но без жестко закодированных selected = 'selected' и вызова .attr, который необходим IE8, он делает 3 разные вещи в Firefox, Chrome и IE8! См. Эту версию: , которая проста и кажется, что она должна работать:

  • в Firefox: ничего не выбрано
  • в Chrome: выбран 0-й вариант
  • в IE8: выбран 1-й вариант

Может, я сошла с ума, и там где-то есть ошибка, которую я не вижу?

Ответы [ 7 ]

66 голосов
/ 19 июня 2012

Вопрос задан в вводящей в заблуждение манере.«Удаление атрибута selected» и «отмена выбора всех опций» - это совершенно разные вещи .

Чтобы отменить выбор всех опций в документированном кросс-браузерном режиме, используйте

* 1007.*

или

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);
22 голосов
/ 20 апреля 2012

Это что-то в том смысле, как jQuery переводит в IE8, не обязательно в сам браузер.

Мне удалось обойтись, уйдя из старой школы и выбрав jQuery для одной строки:

document.getElementById('myselect').selectedIndex = -1;
20 голосов
/ 01 ноября 2011

Это работает:

$("#myselect").find('option').removeAttr("selected");

или

$("#myselect").find('option:selected').removeAttr("selected");

jsFiddle

10 голосов
/ 18 ноября 2013

Использование jQuery 1.9 и выше:

$("#mySelect :selected").prop('selected', false);
2 голосов
/ 09 января 2013

Аналогично ответу @ radiak, но с jQuery (см. этот документ API и комментарий о том, как изменить selectedIndex).

$('#mySelectParent').find("select").prop("selectedIndex",-1);

Преимущества этого подхода:

  • Вы можете остаться в пределах jQuery
  • Вы можете ограничить область, используя селекторы jQuery (#mySelectParent в примере)
  • Более явно определенный код
  • Работает в IE8, Chrome, FF
1 голос
/ 07 июня 2015

Ну, я потратил много времени на эту проблему.Чтобы получить ответ, работая с Chrome и IE, мне пришлось изменить свой подход.Идея состоит в том, чтобы избежать удаления выбранной опции (потому что не может удалить ее правильно с IE).=> это означает, что опция выбирается не путем добавления или установки выбранного атрибута для опции, а для выбора опции на уровне «select» с использованием свойства selectedIndex.

До:

$('#myselect option:contains("value")').attr('selected','selected');
$('#myselect option:contains("value")').removeAttr('selected'); => KO with IE

После:

$('#myselect').prop('selectedIndex', $('#myselect option:contains("value")').index());
$('#myselect').prop('selectedIndex','-1'); => OK with all browsers

Надеюсь, это поможет

1 голос
/ 12 января 2015

Другая альтернатива:

$('option:selected', $('#mySelectParent')).removeAttr("selected");

Надеюсь, это поможет

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