#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
Я хочу создать пользовательский переключатель, который при включении будет выбирать все элементы ul li, а при выключении отменяет выбор всех элементов ul li. аналогично индивидуальный выбор и множественный выбор и отмена выбора также должны работать с элементами списка.придерживайтесь всех этих функций вместе, пожалуйста, помогите.
$('#projects-menu').append("<li value='sales1' class='disabled'>Sales 1</li>")
$('#projects-menu').append("<li value='sales2'>Sales 2</li>")
$('#projects-menu').append("<li value='sales3'>Sales 3</li>")
$('#projects-menu').on('click', 'li', function() {
$("#projects-menu li").removeClass('selected');
$(this).addClass('selected');
})
ul.menu {
margin-top: 30px;
list-style-type: none;
}
ul.menu li {
background-color: #e0e0e0;
padding: 8px 12px;
border: solid 2px white;
cursor: pointer;
border: 3px solid #FFFFFF;
border-radius: 10px;
}
ul.menu li:hover {
background-color: #A9A9A9;
}
ul.menu li.selected {
background-color: #23ac61;
}
ul.menu li.disabled:hover {
background-color: #e0e0e0;
cursor:default;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="projects">
<ul class="menu" id="projects-menu">
</ul>
</div>
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input switchc" id="customSwitch2" checked>
<label class="custom-control-label" for="customSwitch2">Toggle me</label>
</div>
Комментарии:
1. Что именно вы подразумеваете под «выбором»
li
s? Они являются элементами списка, поэтому их нельзя выбрать по умолчанию, и вы, похоже, не добавляете какой-либо код для выполнения какого-либо выбора? Пожалуйста, отредактируйте свой вопрос, чтобы точно объяснить, что вы пытаетесь сделать, чтобы мы могли помочь2. извините. Я обновил код с выбором списка
Ответ №1:
Вы можете использовать forEach
функцию и querySelectorAll
метод, чтобы получить все ul > li и применить выбранный класс, который вы переключаете своим переключателем.
Вам необходимо event delegation
в этом, так как elements
они динамически добавляются в DOM
Если переключатель включен и выключен, вы можете проверить это с помощью функции jQuery is и атрибута :checked
Редактировать: Поскольку вы добавили, что хотите выполнить множественный выбор, удерживая control
клавишу, а затем click
выполнить multi selection
аналогично, Un-selection
нажав Ctrl key
Живая демонстрация:
$(document).ready(function() {
$('#projects-menu').append("<li value='sales1'>Sales 1</li>")
$('#projects-menu').append("<li value='sales2'>Sales 2</li>")
$('#projects-menu').append("<li value='sales3'>Sales 3</li>")
$(document).on('click', '#projects-menu > li', function(event) {
event.preventDefault();
if (event.ctrlKey) {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
$(this).addClass("selected");
}
} else {
$("#projects-menu > li").removeClass("selected");
$(this).addClass("selected");
}
});
let getCheckboxes = document.querySelectorAll('#projects-menu > li') //get checkboxes UL
$(document).on('change', '#customSwitch2', function() {
var $this = $(this)
getCheckboxes.forEach(function(o) {
if ($this.is(':checked')) {
$(o).addClass('selected');
} else {
$(o).removeClass('selected');
}
})
})
})
ul.menu {
margin-top: 30px;
list-style-type: none;
}
ul.menu li {
background-color: #e0e0e0;
padding: 8px 12px;
border: solid 2px white;
cursor: pointer;
border: 3px solid #FFFFFF;
border-radius: 10px;
}
ul.menu li:hover {
background-color: #A9A9A9;
}
ul.menu li.selected {
background-color: #23ac61;
}
ul.menu li.disabled:hover {
background-color: #e0e0e0;
cursor: defau<
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet" />
<div class="projects">
<ul class="menu" id="projects-menu">
</ul>
</div>
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input switchc" id="customSwitch2">
<label class="custom-control-label" for="customSwitch2">Toggle me</label>
</div>
Комментарии:
1. Спасибо.. Я хотел также добавить множественный выбор и отмену выбора, из-за чего я застрял
2. @kavya Я предоставил ответ, основанный на заданном вопросе => Выберите все элементы в ul li с включенным пользовательским переключателем — Дайте мне знать — я не уверен, что вы подразумеваете под множественным выбором
3. ДА.. Я спросил в описании о том, что выбор всех и множественный выбор вместе вызывают у меня трудности
4. множественный выбор — это выбор более одного элемента списка при нажатой клавише ctrl .. аналогично отмене выбора при нажатой клавише ctrl
5. @kavya Смотрите мой обновленный ответ — теперь вы можете выбрать их, нажав
control
клавишу и нажав на выбор, чтобы добавить класс.
Ответ №2:
Попробуйте вот так
function check_uncheck_checkbox(isChecked) {
if(isChecked) {
$('input[name="language"]').each(function() {
this.checked = true;
});
} else {
$('input[name="language"]').each(function() {
this.checked = false;
});
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="divCheckAll">
<input type="checkbox" name="checkall" id="checkall" onClick="check_uncheck_checkbox(this.checked);" />Check All</div>
<br/>
<div id="divCheckboxList">
<div class="divCheckboxItem"><input type="checkbox" name="language" id="language1" value="English" />English</div>
<div class="divCheckboxItem"><input type="checkbox" name="language" id="language2" value="French" />French</div>
<div class="divCheckboxItem"><input type="checkbox" name="language" id="language3" value="German" />German</div>
<div class="divCheckboxItem"><input type="checkbox" name="language" id="language4" value="Latin" />Latin</div>
</div>
Надеюсь, будет полезно
Комментарии:
1. Я не хочу использовать флажок. хотел отображать только как элемент li