получить идентификатор всех отмеченных флажков в div

0

Я пытаюсь динамически добавлять флажки внутри div.

Я хочу, чтобы функция javascript выполняла следующие действия:

  • Когда я устанавливаю флажок: добавьте его id в массив.
  • Когда я сниму флажок: удалите идентификатор из этого массива.

Это то, что я сделал до сих пор:

var chkArray = [];
$(".Checked:checked").each(function () {
    chkArray.push($(this).attr("id"));
});
var selected;
selected = chkArray.join(',') + ",";
if (selected.length > 1) {
    return chkArray;
}
  • 0
    Пожалуйста, оставьте свой HTML
  • 0
    У вас есть класс Checked на div или на флажках? В вашем коде вы создаете строку из массива, чтобы проверить, есть ли что-нибудь в массиве. Почему бы не проверить длину массива вместо этого?
Показать ещё 1 комментарий
Теги:

5 ответов

5
Лучший ответ

Я не уверен, почему вы присоединяетесь к массиву в конце - поэтому я его не включил. Но вот основной метод. $.map() будет перебирать массив флажков и возвращать идентификатор текущего элемента, только если он установлен. $.map() затем сохраняет возвращаемые значения в новом массиве (chkArray):

$checkbox = $('.Checked');
function checkArray(){
    var chkArray = [];
    chkArray = $.map($checkbox, function(el){
        if(el.checked) { return el.id };
    });
    console.log(chkArray);
}

JSFiddle

  • 0
    Мне нравится это элегантное решение. Кстати, примечание к OP - проверка / снятие отметки уже обрабатывается по умолчанию, поэтому все, что вам нужно, это просто, чтобы при нажатии (или изменении) флажка вы проходили через массив флажков и возвращали Идентификаторы тех, которые проверены, так просто.
1

Я протестировал George jsfiddle и не смог заставить его работать, но отредактировал его код и заставил его работать, вы можете попробовать, это работает

 $('#PostAlert').click(function GetID() {

            $checkbox = $('.CheckBxMSG');
            var chkArray = [];
            chkArray = $.map($checkbox, function (el) {
                if (el.checked) { return el.id };
            });
            alert(chkArray);
        })
0

Это то, что я сделал бы:

var checkedArray = [];

$(":checkbox").change(function(){
  if((this).checked){
    checkedArray.push(this.id);
  }
  else{
    checkedArray.splice(checkedArray.indexOf(this.id), 1);
  }

  //you can call your function here if you need to act on this.

});

Codepen

0

Вместо этого возьмите свой идентификатор формы и при отправке проверяйте, все флажки, отмеченные как это

$("#formid input:checkbox:checked").each(function() {
  var chkArray = [];
  chkArray.push($(this).id());
});
0

Это должно делать то, что вы описали

var checkboxes = $("input[type=checkbox]");
var r = [];

checkboxes.on("change",function(e){ 
    if(!e.target.id){
        return;  
    } 
    if(e.target.checked){
        r.push(e.target.id);
    }
    else{
        var index = r.indexOf(e.target.id)
        if(~index){
            r.splice(index, 1);
        }               
    }
    console.log(r);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню