Отмените выбор выбранных параметров в меню выбора с несколькими и группами optgroups

Я хочу, чтобы с помощью щелчка ссылки можно было отменить выбор всех предварительно выбранных параметров в меню выбора с несколькими разрешениями выбора и группами параметров.

Вот пример меню:

<select name="ddBusinessCategory" id="ddBusinessCategory" class="f1" style="width:280px;height:200px" multiple="multiple">
<option value="">Select One</option>
<optgroup label="Abrasives" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="4" selected="selected">Abrasives</option>
</optgroup>
<optgroup label="Abstracters" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="5">Abstracters</option>
</optgroup>
<optgroup label="Abuse Information &amp; Treatment Centers" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="6" selected="selected">Abuse Information &amp; Treatment Centers</option>
</optgroup>
<optgroup label="Accountants" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="7">Accountants</option>
<option value="2672">Certified Public Accountants - </option>
<option value="2673">Public Accountants - </option>
</optgroup>
<optgroup label="Accounting Services" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="8">Accounting Services</option>
</optgroup>
<optgroup label="Acoustical Materials - Wholesale &amp; Manufacturers" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="9">Acoustical Materials - Wholesale &amp; Manufacturers</option>
</optgroup>
</select>

Вы увидите, что выбраны два. Я хочу иметь возможность отменить выбор этих предварительно выбранных.

DONT хочет использовать jquery, просто хочу использовать javascript

Большое спасибо за вашу помощь.

neojakey

Ответы

Ответ 1

Следующая функция должна перебирать все параметры и отменить выбор.

HTML

<a href="#" onclick="clearSelected();">clear</a>

JAVASCRIPT

 function clearSelected(){
    var elements = document.getElementById("ddBusinessCategory").options;

    for(var i = 0; i < elements.length; i++){
      elements[i].selected = false;
    }
  }

ИЗМЕНИТЬ

Я не одобряю установку обработчика события непосредственно на элемент. Если у вас есть опция, дайте элементу некоторый тип id/name и привяжите обработчик события в вашем JavaScript-коде.

ПРИМЕР

Ответ 2

Вы можете упростить код из Chase с помощью свойства javascript "selectedOptions"

HTML

<a href="#" onclick="clearSelected();">clear</a>

JAVASCRIPT

function clearSelected(){
    var elements = document.getElementById("ddBusinessCategory").selectedOptions;

    for(var i = 0; i < elements.length; i++){
      elements[i].selected = false;
    }
  }

В этом случае вы выполняете цикл с уже выбранными параметрами, а не всеми параметрами.

Ответ 3

Не проще ли использовать?:

document.getElementById("ddBusinessCategory").value = "";

Ответ 4

Вам не нужны никакие петли. Свойство selectedIndex " Устанавливает или возвращает индекс выбранного элемента <option> в коллекции (начинается с 0)".
Индексирование начинается с 0, поэтому, если вы установите его на -1, они не будут выбраны. (установка на 0 оставит первый выбранный вариант.)

function clearSelected(w){
  document.getElementById(w).selectedIndex = -1;
}
<a href="#" onclick="clearSelected('ddBusinessCategory');">clear</a>

Ответ 5

Если вы используете jquery, вы можете сделать (я знаю, что человек, который спросил, что он ожидает ответа js, но это может помочь кому-то)

$('#someid').find($('option')).attr('selected',false)

Ответ 6

Если вы не заботитесь о < IE8:

var checkedElements = document.querySelectorAll("#ddBusinessCategory :checked");

​for(var i = 0, length = checkedElements.length; i < length; i++) {
    checkedElements[i].selected = false;
}​

Если вы не заботитесь о < IE9

Array.prototype.forEach.call(document.querySelectorAll("#ddBusinessCategory :checked"), function(el) { el.selected = false });

Используйте ответ от Chase, если вы хотите поддерживать IE7, IE6, FF3 и более ранние версии, или читать его легче.

Ответ 7

Если вы хотите только пропустить только выбранные параметры, я предлагаю цикл while.

var elements = document.getElementById("ddBusinessCategory").selectedOptions;
while (elements.length > 0)
{
    elements[0].selected = false;
}

Ответ Мишеля Сахли не будет работать, когда есть несколько вариантов выбора, потому что по мере продвижения по циклу for изменяется значение elements.length.

Тем не менее, атрибут .selectedOptions немного неприятен (см. IsOptions broken or...?), поэтому, вероятно, не стоит того, что крошечные сбережения вы получаете только перейдя по выбранным параметрам.