jQuery отримує значення встановлених прапорців у масив


129

Я намагаюся отримати значення всіх прапорців, які зараз перевіряються, і зберігати їх у масиві. Ось мій код поки що:

 $("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
      return $(this).val();
    });
    console.log(searchIDs);
  });

Однак це дає більше, ніж мені потрібно. Я отримую не лише значення, але й деякі інші речі, які я не хочу.

["51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002", prevObject: jQuery.fn.jQuery.init [3], контекст: документ, jquery: функція: "1.9.1", конструктор

Я хотів би лише ідентифікатори (перші 3 пункти в цьому випадку).

Використовуючи $.eachта натискаючи значення на масив, я отримую бажаний вихід:

$("#find-table input:checkbox:checked").each(function(){ myArray.push($(this).val()); })

["51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002"]

Однак я хотів би використовувати $.map, оскільки це зберігає мені рядок коду і красивіше.

Дякую

Відповіді:


262

Зателефонуйте .get()в самому кінці, щоб перетворити отриманий об’єкт jQuery у справжній масив.

$("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
      return $(this).val();
    }).get(); // <----
    console.log(searchIDs);
});

Відповідно до документації :

Оскільки значення повернення - це об'єкт jQuery, який містить масив, дуже часто викликати .get () за результатом для роботи з базовим масивом.


1
Я очікував від справжнього масиву $.map. Дякую за рішення, воно працює.
якщо __name__ не вказано

Дуже дякую, що мені це потрібно для мама Ticketcenter
Стівен

2
Що я не розумію з цього приводу, це те, що .get()потрібно, коли функція повертає .val()кожен елемент колекції jQuery. Це тому, що mapперетворює його назад в об’єкт jQuery, перш ніж передавати його searchIDs?
іконоборство

Чи можемо ми отримати значення типу масиву?
krutssss

22

DEMO: http://jsfiddle.net/PBhHK/

$(document).ready(function(){

    var searchIDs = $('input:checked').map(function(){

      return $(this).val();

    });
    console.log(searchIDs.get());

});

Просто зателефонуйте get (), і ви матимете свій масив, як написано у специфікаціях: http://api.jquery.com/map/

$(':checkbox').map(function() {
      return this.id;
    }).get().join();

18

Вам потрібно додати .toArray()до кінця своєї .map()функції

$("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
        return $(this).val();
    }).toArray();
    console.log(searchIDs);
});

Демонстрація: http://jsfiddle.net/sZQtL/


10

Я трохи відремонтував ваш код і вважаю, що прийшов із рішенням, на яке ви шукали. В основному замість того, searchIDsщоб налаштування було результатом .map()I, я просто штовхнув значення в масив.

$("#merge_button").click(function(event){
  event.preventDefault();

  var searchIDs = [];

  $("#find-table input:checkbox:checked").map(function(){
    searchIDs.push($(this).val());
  });

  console.log(searchIDs);
});

Я створив загадку із запущеним кодом.



1

Потрібні елементи форми, названі в HTML, як масив, щоб бути масивом в об’єкті JavaScript, як би форма була фактично подана.

Якщо є форма з кількома прапорцями, наприклад:

<input name='breath[0]' type='checkbox' value='presence0'/>
<input name='breath[1]' type='checkbox' value='presence1'/>
<input name='breath[2]' type='checkbox' value='presence2'/>
<input name='serenity'  type='text' value='Is within the breath.'/>
...

В результаті виходить об'єкт із:

data = {
   'breath':['presence0','presence1','presence2'],
   'serenity':'Is within the breath.'
}


var $form = $(this),
    data  = {};

$form.find("input").map(function()
{
    var $el  = $(this),
        name = $el.attr("name");

    if (/radio|checkbox/i.test($el.attr('type')) && !$el.prop('checked'))return;

    if(name.indexOf('[') > -1)
    {
        var name_ar = name.split(']').join('').split('['),
            name    = name_ar[0],
            index   = name_ar[1];

        data[name]  = data[name] || [];
        data[name][index] = $el.val();
    }
    else data[name] = $el.val();
});

І тут є багато відповідей, які допомогли вдосконалити мій код, але вони були занадто складними або не дуже хотіли. Я хотів: Перетворити форми форми в об’єкт JavaScript за допомогою jQuery

Працює, але може бути вдосконалено: працює лише на одновимірних масивах, і результуючі індекси можуть бути не послідовними. Властивість length масиву повертає наступне число індексу як довжину масиву, а не фактичну довжину.

Сподіваюся, що це допомогло. Намасте!



0

Не використовуйте "кожен". Він використовується для операцій та змін одного і того ж елемента. Використовуйте "карту" для отримання даних з тіла елемента та використання їх десь в іншому місці.


Документи jQuery мають чудові приклади для більшості всього, в тому числіmap
jinglesthula

0

тут дозволяє це клас прапорців на сторінках, а var дозволяє збирати їх у масив, і ви можете перевірити, чи зареєстровано true у циклі, а потім виконати бажану операцію окремо. Тут я встановив власну дійсність. Я думаю, це вирішить вашу проблему.

  $(".allows").click(function(){
   var allows = document.getElementsByClassName('allows');
   var chkd   = 0;  
   for(var i=0;i<allows.length;i++)
   {
       if(allows[i].checked===true)
       {
           chkd = 1;
       }else
       {

       }
   }

   if(chkd===0)
   {
       $(".allows").prop("required",true);
       for(var i=0;i<allows.length;i++)
        {
        allows[i].setCustomValidity("Please select atleast one option");
        }

   }else
   {
       $(".allows").prop("required",false);
       for(var i=0;i<allows.length;i++)
        {
        allows[i].setCustomValidity("");
        }
   }

}); 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.