Проверьте, проверен ли хотя бы один флажок с помощью jQuery
У меня есть пять флажков. Используя jQuery, как проверить, проверен ли хотя бы один из них?
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
Ответы
Ответ 1
Изменить: исходное решение в этом ответе неэффективно и не должно использоваться. См. Пересмотренное решение на основе комментариев и примеров из других ответов на этот вопрос.
Исходное (плохое) решение следует:
// DO NOT USE; SEE BELOW
$('button').click(function () {
var atLeastOneIsChecked = false;
$('input:checkbox').each(function () {
if ($(this).is(':checked')) {
atLeastOneIsChecked = true;
// Stop .each from processing any more items
return false;
}
});
// Do something with atLeastOneIsChecked
});
Использование .each() избыточно в этом примере, так как .is() может использоваться непосредственно на наборе объектов, а не вручную перебирать их через каждый. Ниже следует более эффективное решение:
$('button').click(function () {
var atLeastOneIsChecked = $('input:checkbox').is(':checked');
// Do something with atLeastOneIsChecked
});
Обратите внимание, что один из комментариев указывает на сильную неприязнь к $(this).is(':checked')
. Чтобы уточнить, нет ничего плохого в is(':checked')
в тех случаях, когда вы тестируете набор объектов. Тем не менее, вызов is(':checked')
для одного элемента намного менее эффективен, чем вызов .checked
в том же элементе. Это также включает ненужный вызов функции $.
Ответ 2
is()
может сделать это и, возможно, является единственным приемлемым использованием is(":checked")
:
В документах jQuery http://api.jquery.com/is/:
Проверьте текущий согласованный набор элементов на объект селектора, элемента или jQuery и верните true, если хотя бы один из этих элементов соответствует заданным аргументам.
alert($("input[name='service[]']").is(":checked"));
Пример: http://jsfiddle.net/AndyE/bytVX/1/ (на основе скрипта Брэндон Гано)
В качестве альтернативы и потенциально быстрее вы можете передать функцию is()
:
$("input[name='service[]']").is(function () {
return this.checked;
});
Ответ 3
Это должно сделать трюк:
function isOneChecked() {
return ($('[name="service[]"]:checked').length > 0);
}
Ответ 4
Другой ответ:
!!$("[type=checkbox]:checked").length
или
!!$("[name=service[]]:checked").length
Это зависит от того, что вы хотите.
Ответ 5
var checkboxes = document.getElementsByName("service[]");
if ([].some.call(checkboxes, function () { return this.checked; })) {
// code
}
То, что вы хотите, просто, получите все элементы с именем, затем запустите некоторый код, если отмечены некоторые из этих элементов.
Нет необходимости в jQuery.
Вам может понадобиться прокладка ES5 для устаревших браузеров, хотя
Ответ 6
Вы должны попробовать вот так....
var checkboxes = $("input[type='checkbox']"),
submitButt = $("input[type='submit']");
checkboxes.click(function() {
submitButt.attr("disabled", !checkboxes.is(":checked"));
});
Ответ 7
вам нужно проверить, установлен ли флажок или нет.
$("#select_all").click(function(){
var checkboxes = $("input[type='checkbox']");
if(checkboxes.is(":checked"))
alert("checked");
else
alert("select at least one;
});
Ответ 8
var atLeastOneIsChecked = $('input[name="service[]"]:checked').length > 0;
Ответ 9
Вы можете сделать следующим образом. Сначала установите переменную, скажем, checked
как false
. Затем установите его на true
, если выполнено следующее условие. Используйте оператор if
для проверки переменной. Обратите внимание: здесь submit
- id
кнопки, main
- идентификатор формы.
$("#submit").click(function() {
var checked = false;
if (jQuery('#main input[type=checkbox]:checked').length) {
checked = true;
}
if (!checked) {
//Do something
}
});