Лучший способ отменить выбор <select>в JQuery? - PullRequest
204 голосов
/ 07 декабря 2009
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

Как лучше всего использовать jQuery для элегантного отмены выбора опции?

Ответы [ 14 ]

322 голосов
/ 07 декабря 2009

Использование removeAttr ...

$("option:selected").removeAttr("selected");

Или Опора

$("option:selected").prop("selected", false)
149 голосов
/ 19 июня 2012

Здесь есть много ответов, но, к сожалению, все они довольно старые и поэтому полагаются на attr / removeAttr, что на самом деле не лучший способ.

@ coffeeyesplease правильно упоминает, что хорошим кросс-браузерным решением является использование

$("select").val([]);

Еще одно хорошее кросс-браузерное решение -

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

Здесь вы можете запустить самотестирование здесь . Протестировано на IE 7/8/9, FF 11, Chrome 19.

23 голосов
/ 13 мая 2012

Прошло много времени с тех пор, как меня об этом спросили, и я не проверял это на старых браузерах, но мне кажется, что гораздо более простой ответ -

$("#selectID").val([]);

.val () также работает для select http://api.jquery.com/val/

22 голосов
/ 09 декабря 2014

Самый простой метод

$('select').val('')

Я просто использовал это на самом выделении, и он добился цели.

Я нахожусь на jQuery 1.7.1 .

19 голосов
/ 15 января 2010

Ответы пока работают только для множественного выбора в IE6 / 7; для более распространенного не мульти выбора, вам нужно использовать:

$("#selectID").attr('selectedIndex', '-1');

Это объясняется в посте, связанном с flyfishr64. Если вы посмотрите на это, вы увидите, что есть 2 случая - мульти / не мульти. Ничто не останавливает вас от того, что вы оба готовы для полного решения:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");
7 голосов
/ 09 августа 2014

О, JQuery.

Так как есть еще нативный подход к JavaScript, я чувствую необходимость предоставить его.

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

И просто чтобы показать вам, насколько это быстрее: тест

5 голосов
/ 10 августа 2012
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

Это будет повторять каждый элемент и отменять выбор только тех, которые отмечены

5 голосов
/ 07 декабря 2009

Быстрый Google нашел это сообщение , в котором описывается, как сделать то, что вы хотите для одного и нескольких списков выбора в IE. Решение кажется довольно элегантным:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 
3 голосов
/ 07 декабря 2009
$(option).removeAttr('selected') //replace 'option' with selected option's selector
2 голосов
/ 19 января 2017

Еще один простой способ:

$("#selectedID")[0].selectedIndex = -1

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