Style.display = 'none' не работает над тегами опций в chrome, но он работает в firefox
ok, есть пример кода, который демонстрирует проблему.
если я нажму кнопку в firefox, первый вариант исчезнет.
если я нажимаю кнопку в chrome, ничего не происходит, или, вернее, если я проверю первый вариант, у него есть атрибут "style =" display: none ", но сам параметр на странице html не скрыт.
<form>
<select>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<input type="button" onclick="document.getElementsByTagName('option')[0].style.display='none'" value="hide option 1">
</form>
почему это не работает в chrome?
Ответы
Ответ 1
Обходной путь - удалить элементы option
в ответ на ваше событие и добавить их обратно, если и когда они понадобятся. IIRC, IE не позволит вам установить элементы display
в none
на option
. Я бы посоветовал хранить удаленные элементы в массиве, чтобы вы могли легко добавить их обратно.
Ответ 2
Вам, вероятно, придется удалить <option>
вместо "скрытия". Если это не решение для вас, попробуйте отключить его.
document.getElementsByTagName('option')[0].disabled='disabled'
PS: Возможно, вы захотите пересмотреть использование getElementsByTagName('option')
, может стать беспорядочным, если у вас больше элементов <select>
.
Ответ 3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>
removeIt = function()
{
var theSelect = document.getElementById("theSelect");
var theOption = document.getElementById("theOption");
theSelect.removeChild(theOption);
};
</script>
</head>
<body>
<select id="theSelect">
<option>1</option>
<option id="theOption">2</option>
<option>3</option>
</select>
<input type="button" onclick="removeIt()" value="remove it!"/>
</body>
</html>
Я быстро получил его, просто удалив его из своего родительского класса... очевидно, это будет взлом.
Я постараюсь найти лучшее решение для вас =)
Кстати, добро пожаловать в переполнение стека
Ответ 4
Вопрос в том, почему это работает в любом браузере?
Параметры не используются в качестве элементов на странице, они содержат информацию, отображаемую в элементе select. Некоторые браузеры позволяют применять некоторые стили к параметрам, но обычно вы не можете ожидать поддержки кросс-браузера для любых стилей вообще.
Если вы хотите, чтобы параметр отображался, вам просто нужно удалить его из выбора.
Ответ 5
Поскольку мое решение (asp.net), я постараюсь сделать это таким образом.
- Создать dropdowlist будет все ListItems
- Использование javascript для добавления или удаления ListItems (примечание: для опции add необходимо одинаковое значение и текст в элементах asp: dropdownlist)
function removeOptionSelected() {
var ddl = document.getElementById('ddl_DropList');
var i;
for (i = ddl.length - 1; i >= 0; i--) {
ddl.remove(i);
}
}
function addOptions3() {
removeOptionSelected();
var ddl = document.getElementById('ddl_DropList');
var elOptNew = document.createElement('option');
elOptNew.text = 'Monthly Top Producer(Project)';
elOptNew.value = 'GCE';
try {
ddl.add(elOptNew, null); // standards compliant; doesn't work in IE
}
catch (ex) {
ddl.add(elOptNew); // IE only
}
elOptNew = document.createElement('option');
elOptNew.text = 'Monthly Top Leaders - DD';
elOptNew.value = 'DRE';
try {
ddl.add(elOptNew, null); // standards compliant; doesn't work in IE
}
catch (ex) {
ddl.add(elOptNew); // IE only
}
elOptNew = document.createElement('option');
elOptNew.text = 'Monthly Top Leaders - SDD';
elOptNew.value = 'DRESDD';
try {
ddl.add(elOptNew, null); // standards compliant; doesn't work in IE
}
catch (ex) {
ddl.add(elOptNew); // IE only
}
elOptNew = document.createElement('option');
elOptNew.text = 'Monthly Top Leaders - GD';
elOptNew.value = 'GRE';
try {
ddl.add(elOptNew, null); // standards compliant; doesn't work in IE
}
catch (ex) {
ddl.add(elOptNew); // IE only
}
}
Ответ 6
Для удаления одной опции из выбранной формы может использоваться jQuery $(). eq(). remove() или $(). remove().
Аналогичным было удаление одной таблицы из таблицы:
$('form table tr').eq(1).remove();
где:
$('form table tr')
говорят, что удаленным элементом будет строка таблицы (tr) из таблицы, заключенной в форму (таблица форм).
eq(1)
говорят, что удаленным будет второй элемент (элемент с номером индекса 1)
remove()
скажите, что элемент будет удален.
Но когда это нужно использовать для опции, тогда все необходимое было бы (например):
$('select option[value="1"]').remove();
потому что проще найти опцию по значению, чем по номеру индекса (если у вас не будет больше ioption с тем же значением), но это бред, чтобы иметь такие опции). Использование номера индекса является хорошим, если у вас нет другого, что вы можете использовать для поиска удаленного элемента.
Также вы можете, конечно, добавить имя или название формы и выбрать имя (или id или класс) в идентификацию элемента
$('form[name="date"] selection[name="day"] option[value="1"]').remove();
$('form#date selection#day option[value="1"]').remove();
но первый вариант лучше - и более логичен из-за процессов на стороне сервера, где вам нужно использовать имя атрибута вместо id или класса.
Ответ 7
Я знаю, что это уже старый, но вы можете - особенно если вы используете родительский переменный jQuery.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Demo Page</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
function sourceListChange() {
var oVisible = $('#destList');
var newCategory = $( "#sourceList" ).val()||'';
var oToShow = $();
oHiddenDestList.append(oVisible.find('option'));
if (newCategory) {
oToShow = oHiddenDestList.find('.'+newCategory);
}
if (oToShow.length==0) {
oVisible.append (oHiddenDestList.find('.NA'));
} else if (oToShow.length!=1) {
oVisible.append (oHiddenDestList.find('.SELECT'));
}
oVisible.prop('selectedIndex', 0);
oVisible.append (oToShow);
}
$(document).ready(function() {
sourceListChange();
});
var oHiddenDestList = $(document.createElement('select'));
</script>
<style>
</style>
</head>
<body>
Select a parent group:
<select id="sourceList" onchange="sourceListChange()">
<option class="SELECT" value="" selected disabled>Please Select</option>
<option value="veg">Vegetables</option>
<option value="fruit">Fruit</option>
</select>
<select id="destList">
<option class="SELECT" value="*" selected disabled>Please Select</option>
<option class="NA" value="" selected disabled>Not Applicable</option>
<option class="fruit">Apple</option>
<option class="fruit">Bannana</option>
<option class="veg">Carrot</option>
<option class="veg">Pea</option>
</select>
</body>
</html>
Ответ 8
Решение:
var ua = navigator.userAgent.toLowerCase();
var check = function(r) { return r.test(ua);};
var isChrome = check(/chrome/);
`
var f=document.getElementById('select_tag_id');
f.options[i].style.display='none';
if (isChrome) f.size=2;
Поле выбора изменилось на 2 размера (например, несколько), но работает.
Этот трюк не работает под сафари: (