#javascript #jquery #html #checkbox
#javascript #jquery #HTML #флажок
Вопрос:
HTML:
<ol>
<span>Select All<input id='selectall' type="checkbox" onclick='test(this.id);'>
<ul>
<span class='selectall'>1.<input type="checkbox" class='selectall'></span>
<span class='selectall'>2.<input type="checkbox" class='selectall'></span>
<span class='selectall'>3.<input type="checkbox" class='selectall'></span>
<span class='selectall'>4.<input type="checkbox" class='selectall'></span>
<span class='selectall'>5.<input type="checkbox" class='selectall'></span>
</ul>
</span>
</ol>
JS:
function test(clicked_id) {
if ($("#" clicked_id).prop("checked", true)) {
$('#' clicked_id ' .' clicked_id).prop('checked', true);
} else {
$('#' clicked_id ' .' clicked_id).prop('checked', false);
}
}
https://jsfiddle.net/j59eeqgu/
Я хочу выбрать свой main-checbox и установить другие флажки, но я делаю что-то неправильно. Когда я пытаюсь установить свой main-checkbox, ничего не происходит.
Комментарии:
1. Вы правильно включили jQuery?
2. Разметка недопустима. Список ( упорядоченный / неупорядоченный ) может содержать только
<li>
элементы3.
function test(clicked_id) { $('#' clicked_id).closest('ol').find('input.' clicked_id).prop('checked', $("#" clicked_id).prop("checked")); }
Ответ №1:
Вы используете id
для других флажков вместо class
и используете одну строку this.checked
вместо if condition
,
$('#selectall').click(function(){
$('.selectall[type="checkbox"]').prop('checked', this.checked);
});
К вашему сведению, вам следует использовать li
с ul
$('#selectall').click(function(){
$('.selectall[type="checkbox"]').prop('checked', this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>Select All<input id='selectall' type="checkbox">
<ul>
<span class='selectall'>1.<input type="checkbox" class='selectall'></span>
<span class='selectall'>2.<input type="checkbox" class='selectall'></span>
<span class='selectall'>3.<input type="checkbox" class='selectall'></span>
<span class='selectall'>4.<input type="checkbox" class='selectall'></span>
<span class='selectall'>5.<input type="checkbox" class='selectall'></span>
</ul>
</span>
Комментарии:
1. Вы можете улучшить отступы и предложить чистое решение, удалив все неиспользуемые html-элементы и классы..
2. Я уже упоминал об этом в своем ответе и сосредоточился на основной проблеме.
Ответ №2:
Вот рабочий пример. Я также отредактировал вашу скрипку
$(document).on('click', '#selectall', function() {
if($(this).is(':checked'))
$(this).parent().find('input[type="checkbox"]').prop('checked', true);
else
$(this).parent().find('input[type="checkbox"]').prop('checked', false);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ol>
<span>Select All<input id='selectall' type="checkbox">
<ul>
<span class='selectall'>1.<input type="checkbox" class='selectall'></span>
<span class='selectall'>2.<input type="checkbox" class='selectall'></span>
<span class='selectall'>3.<input type="checkbox" class='selectall'></span>
<span class='selectall'>4.<input type="checkbox" class='selectall'></span>
<span class='selectall'>5.<input type="checkbox" class='selectall'></span>
</ul>
</span>
</ol>
РЕДАКТИРОВАТЬ: Обновить из комментария:
$(document).ready(function() {
var $selects = $('input[id^="select_"]');
$selects.on('click', function() {
var $checkboxes = $(this).parent().find('input[type="checkbox"]');
$checkboxes.prop('checked', this.checked);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ol>
<span>Select All<input id='select_0' type="checkbox">
<ul>
<span class='selectall'>1.<input type="checkbox" class='selectall'></span>
<span class='selectall'>2.<input type="checkbox" class='selectall'></span>
</ul>
</span>
</ol>
<ol>
<span>Select All<input id='select_1' type="checkbox">
<ul>
<span class='selectall'>1.<input type="checkbox" class='selectall'></span>
<span class='selectall'>2.<input type="checkbox" class='selectall'></span>
</ul>
</span>
</ol>
ПРАВКА 2: Улучшите свой HTML, вы сможете сэкономить большую часть кода и упростить его обработку. Вы можете добавить больше списков по мере необходимости.
$(document).ready(function() {
var $list = $('ul.my-whatever');
var $selects = $list.find('li > input[type="checkbox"]');
$selects.on('click', function() {
var $checkboxes = $(this).parent().find('input[type="checkbox"]');
$checkboxes.prop('checked', this.checked);
});
});
ul li {
margin-bottom: 10px;
}
ul ul li {
margin: 0;
}
ul ul {
list-style: decimal;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="my-whatever">
<li>
Select All <input type="checkbox">
<ul>
<li>Something <input type="checkbox"></li>
<li>Something <input type="checkbox"></li>
</ul>
</li>
<li>
Select All <input type="checkbox">
<ul>
<li>Something <input type="checkbox"></li>
<li>Something <input type="checkbox"></li>
</ul>
</li>
<li>
Select All <input type="checkbox">
<ul>
<li>Something <input type="checkbox"></li>
<li>Something <input type="checkbox"></li>
</ul>
</li>
</ul>
Комментарии:
1. Спасибо! пока это работает, но что, если бы у меня было это:
2. Как я могу сделать его универсальным, не указывая идентификатор в моей функции?
Ответ №3:
$("#selectall").change(function() {
var parentChecked = this.checked;
$("input.selectall").each(function(){
$(this).prop("checked",parentChecked);
});
});
Комментарии:
1. jsfiddle.net/j59eeqgu/13 — что, если у меня будет это, как я могу сделать это универсальным?
2. теперь он более общий 🙂
Ответ №4:
Убедитесь, что в вашем коде есть span
теги внутри ul
.. Вам лучше использовать ul
, li
и добавить CSS для отображения в строке.. Таким образом, вы можете очистить свой html.
Чтобы установить все флажки, вы можете добавить функцию обработчика событий щелчка к вашему #selectall
флажку:
$('#selectall').on('click', function(){
$('input:checkbox').prop('checked', this.checked);
});
ul {
list-style-type: none;
margin: 10px 0 0 0;
padding: 0;
}
li {
float: left;
padding: 0 8px 0 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Select All <input type="checkbox" id="selectall">
<ul>
<li>1.<input type="checkbox"></li>
<li>2.<input type="checkbox"></li>
<li>3.<input type="checkbox"></li>
<li>4.<input type="checkbox"></li>
<li>5.<input type="checkbox"></li>
</ul>
Комментарии:
1. Спасибо, Йосвел! У вас есть идея, как заставить это работать более чем для одного списка? Давайте предположим, что у меня есть еще списки, и я проверяю случайный.
2. Не поймите превратно ваш комментарий: прямо сейчас все флажки ввода
$('input:checkbox')
будут проверены при нажатии#selectall
Ответ №5:
Вы можете попробовать использовать этот скрипт jQuery, чтобы добавить свою checkAll
функцию в свой checkboxes
.
HTML
<ol>
Select All
<input id='selectall' class="selectall" type="checkbox">
<ul>
1.<input type="checkbox" class='selectme'>
2.<input type="checkbox" class='selectme'>
3.<input type="checkbox" class='selectme'>
4.<input type="checkbox" class='selectme'>
5.<input type="checkbox" class='selectme'>
</ul>
</ol>
jQuery
$(function() {
$('.selectall').click(function() {
$('.selectme').prop('checked', $(this).is(':checked'));
});
$('.selectme').click(function() {
if ($('.selectme:checked').length == $('.selectme').length) {
$('.selectall').prop('checked', true);
} else {
$('.selectall').prop('checked', false);
}
});
});
Я обновил ваш class
для input type="checkbox"