Отмените выбор выбранных параметров в меню выбора с несколькими и группами 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 & Treatment Centers" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="6" selected="selected">Abuse Information & 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 & Manufacturers" style="background:#F5F5F5;border-bottom:1px #EEE solid">
<option value="9">Acoustical Materials - Wholesale & 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...?), поэтому, вероятно, не стоит того, что крошечные сбережения вы получаете только перейдя по выбранным параметрам.