Получить отмеченные значения флажков

#jquery

#jquery

Вопрос:

У меня есть таблица с флажками в ней. и CSS для флажка — GridCheckBox, я хочу прочитать подсказку для флажков в массив с разделением.

Я использую эту функцию. Но это не приводит к получению отмеченных элементов. но получение непроверенных элементов правильно.

Это работает хорошо

 var titles = [];
$('#ListGrid .GridCheckBox').each(function() {
    if ($(this).attr('title')) {
        titles.push($(this).attr('title'));
    }
});
  

И это не работает (отмеченные элементы)

 var titles = [];
$('#ListGrid .GridCheckBox:checked').each(function() {
    if ($(this).attr('title')) {
        titles.push($(this).attr('title'));
    }
});
  

Комментарии:

1. какая версия jQuery, и, пожалуйста, покажите вашу HTML-разметку.

2. Опубликуйте HTML, который вы используете, или, если он длинный, создайте jsFiddle, пожалуйста

3. предполагая, что двойные кавычки в начале селектора являются опечаткой в вопросе, а не в вашем исходном коде, это должно работать нормально.

4. @Chad Пожалуйста, найдите разметку в sharetext.org/ACG9

5. в @fearofawhackplanet нет ошибки копирования-вставки … это исходный параметр titles = []; $(‘#ListGrid .GridCheckBox:проверено’).each(функция() { if ($(this).attr(‘title’)) { titles.push($(this).attr(‘title’)); } });

Ответ №1:

Ну, другой способ сделать это — использовать jQuery $.map () в этом примере я собираю все поля выбора по имени. Например:

 var titles = $.map($("input[name='name_of_checkboxes']:checked"),function(a){return a.title;});
  

Shuld возвращает массив с заголовками selected — поле выбора.

Редактировать

Чтобы не получить ни одного выбранного флажка, вы можете использовать это

   var not_selected = $.map($("input[name='name_of_checkboxes']:not(:checked)"),function(a){return a.title;});
  

HTML:

 <input type="checkbox" name="name_of_checkboxes" checked="checked" title="1" />
<input type="checkbox" name="name_of_checkboxes" title="2" />
<input type="checkbox" name="name_of_checkboxes" checked="checked" title="3" />
<input type="checkbox" name="name_of_checkboxes" title="4"/>
  

Больше n нет

Ответ №2:

Из-за того, что это не работает. Класс «.GridCheckBox», к которому вы применены, находится в родительском «диапазоне», а не в самом «вводе флажка»!

вы можете сделать это, хотя:

 $('#ListGrid .GridCheckBox').each(function() {
var target = $(this);
if (target.find("input:checkbox").is(":checked")) {
    titles.push(target.attr('title'));
}});
  

предполагая, что один span.GridCheckBox содержит только один ввод флажка.

Комментарии:

1. да, это сработало. спасибо ‘code’ var titles = []; $(‘#ListGrid .GridCheckBox’).each(функция() { var target = $(this); if (target.find(«ввод: флажок»).is(«:проверено»)) { titles.push($(this).attr(‘заголовок’)); } }); // тревога (титры. toString()); если (заголовки. длина > 0) { $(«#SelectedEmployeeIds»).val(titles.join(‘,’)); } ‘код’

Ответ №3:

Чтобы попытаться устранить любые ошибки, а также повысить производительность, попробуйте вместо этого следующее:

 $('#ListGrid .GridCheckBox').filter(':checked').each( ..
  

Поскольку :checked это расширение jQuery, оно работает не так хорошо, как собственные методы браузера для сопоставления объектов.

Комментарии:

1. это не работает $ (‘#ListGrid .GridCheckBox’).filter(‘: проверено’).each(функция() { if ($(this).attr(‘title’)) { titles.push($(this).attr(‘title’))); } }); оповещение (titles. toString()); выводится пустым