Я использую регулярный зависимый выбор, как в приведенном ниже коде:
HTML:
<select id="select_ciudad">
<option>Madrid</option>
<option>Barcelona</option>
<select id="select_act">
<option>A</option>
<option>B</option>
<select id="select_act2" style="display:none">
<option>1</option>
<option>2</option>
</select>
JS:
$( document ).ready(function() {
$("#select_ciudad").change(function() {
if ($("#select_ciudad").val()=="Madrid") {
$("#select_act").show();
$("#select_act2").hide();
}
else if ($("#select_ciudad").val()=="Barcelona") {
$("#select_act2").show();
$("#select_act").hide();
};
});
Но теперь я больше не хочу использовать select, и я заменяю его неуправляемым списком css, делая что-то вроде:
Новый HTML:
<section class="main">
<div class="wrapper">
<div id="dd" class="wrapper-dropdown" tabindex="1">
<span>Ciudad</span>
<ul class="dropdown">
<li><a href="#">Madrid</a></li>
<li><a href="#">Barcelona</a></li>
</ul>
</div>
</div>
</section>
И теперь я не могу заставить JS работать таким же образом, чтобы что-то сделать, когда я нажимаю на любой из параметров (элементы списка). Кто-нибудь знает, как это сделать?
Вы можете назначать значения для каждого из элементов <li>
с помощью data-
. Затем вы можете привязать обработчик кликов к каждому элементу <a>
и использовать значение из родительского элемента <li>
в инструкции if-else.
Но я рекомендую избегать инструкции if-else с помощью классов CSS.
Сначала добавьте data-
в элементы <li>
. Эти значения представляют собой селектора, которые идентифицируют элементы, которые должны отображаться для этой опции.
<ul class="dropdown">
<li data-selector=".group-madrid"><a href="#">Madrid</a></li>
<li data-selector=".group-barcelona"><a href="#">Barcelona</a></li>
</ul>
Затем поместите классы CSS на элементы, которые вы хотите показать/скрыть. Используйте один класс (в данном случае "группу"), чтобы идентифицировать все такие элементы. Затем дайте каждому элементу второй класс (в данном случае либо "group-madrid", либо "group-barcelona"), чтобы привязать их к одному из пунктов выше.
<select id="select_act" class="group group-madrid">
...
</select>
<select id="select_act2" class="group group-barcelona">
...
</select>
Затем привяжите обработчик по клику к элементам <a>
.
$(document).ready(function() {
$('ul.dropdown').on('click', '>li>a', function(e) {
e.preventDefault();
$('.group').hide();
$($(this).parent('li').attr('data-selector')).show();
}).children('li:first').children('a:first').click();
});
В приведенном выше коде фактически используется делегирование делегирования, привязка одного обработчика щелчка к элементу <ul>
, но когда выполняется обратный вызов, this
относится к элементу <a>
который был нажат.
В случае, если это не очевидно, причина, по которой я делаю это, заключается в том, что вы можете добавить больше групп или более элементов в существующую группу, не изменяя вообще код JavaScript, как показано в этом jsfiddle.
</select>
отсутствуют.