найти все непроверенные флажок в jquery


197

У меня есть список флажков:

<input type="checkbox" name="answer" id="id_1' value="1" />
<input type="checkbox" name="answer" id="id_2' value="2" />
...
<input type="checkbox" name="answer" id="id_n' value="n" />

Я могу собрать все значения отмеченных флажков; мой вопрос, как можно получить все значения непроверенных флажков? Я попытался:

$("input:unchecked").val();

чтобы получить значение непроверенного флажка, но я получил:

Синтаксическая ошибка, нераспознанное выражение: не проверено.

Кто-нибудь может пролить свет на этот вопрос? Спасибо!



Ответы:


435

Как говорится в сообщении об ошибке, jQuery не включает :uncheckedселектор.
Вместо этого вам нужно инвертировать :checkedселектор:

$("input:checkbox:not(:checked)")

4
И использование ввода [type = checkbox] является самым быстрым.
jClark

29

$("input:checkbox:not(:checked)") Вы получите непроверенные коробки.


10

Вы можете сделать это, расширив функциональность jQuerys. Это сократит объем текста, который вы должны написать для селектора.

$.extend($.expr[':'], {
        unchecked: function (obj) {
            return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
        }
    }
);

Затем вы можете использовать, $("input:unchecked")чтобы получить все флажки и переключатели, которые отмечены.


7

Также это может быть достигнуто с чистым JS таким образом:

var matches = document.querySelectorAll('input[type="checkbox"]:not(:checked)');

3
$("input[type='checkbox']:not(:checked):not('\#chkAll\')").map(function () { 
   var a = ""; 
   if (this.name != "chkAll") { 
      a = this.name + "|off"; 
   } 
   return a; 
}).get().join();

Это восстановит все непроверенные флажки и исключит флажок «chkAll», который я использую, чтобы пометить | снять все флажки. Поскольку я хочу знать, какое значение я передаю в базу данных, я установил для них значение off, поскольку флажки дают мне значение on.

//looking for unchecked checkboxes, but don’t include the checkbox all that checks or unchecks all checkboxes
//.map - Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.

//.get - Retrieve the DOM elements matched by the jQuery object.
//.join - (javascript) joins the elements of an array into a string, and returns the string.The elements will be separated by a specified separator. The default separator is comma (,).

2
Вы не должны включать в свой ответ что-то, что не имеет никакого отношения к ФП. Он не использует chkAllкоробку, так какой смысл ее упоминать.
МММ

3

Вы можете использовать как это:

$(":checkbox:not(:checked)")


0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });

1
Добро пожаловать в StackOverflow! Пожалуйста, добавьте пояснение к своему коду, чтобы другие пользователи (для которых это может быть то, что они ищут) знают, что делает ваш код.
Нандер Спирстра
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.