jQuery, işaretli onay kutularının değerlerini diziye alır


129

Şu anda işaretlenmiş olan tüm onay kutularının değerlerini almaya ve bunları bir dizide saklamaya çalışıyorum. Şimdiye kadarki kodum:

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

Ancak bu ihtiyacım olandan daha fazlasını veriyor. Sadece değerleri almakla kalmıyorum, istemediğim başka şeyler de var.

["51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002", prevObject: jQuery.fn.jQuery.init [3], bağlam: belge, jquery: "1.9.1", yapıcı

Sadece kimlikler istiyorum (bu durumda ilk 3 öğe).

$.eachDeğerleri kullanarak ve bir diziye iterek, istenen çıktıyı elde ederim:

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

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

Bununla birlikte $.map, bana bir satır kod kaydettiği ve daha güzel olduğu için kullanmak istiyorum .

Teşekkürler

Yanıtlar:


262

.get()Sonuçta elde edilen jQuery nesnesini gerçek bir diziye dönüştürmek için en sonunda arayın .

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

Başına belgeler :

Dönüş değeri, bir dizi içeren bir jQuery nesnesi olduğundan, temel bir diziyle çalışmak için sonuçta .get () işlevinin çağrılması çok yaygındır.


1
True Array'den bekliyordum $.map. Çözüm için teşekkürler, işe yarıyor.
__name__ Yok ise

Çok teşekkür ederim Ticketcenter için buna ihtiyacım var
Steven

2
Bununla ilgili anlamadığım şey .get(), işlev .val()jQuery koleksiyonundaki her bir öğeden döndürürken neden gerekli olduğu . Bunun nedeni map, onu aktarmadan önce bir jQuery nesnesine dönüştürmesi searchIDsmi?
iconoclast

Dizi türü olarak değer alabilir miyiz?
krutssss

22

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

$(document).ready(function(){

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

      return $(this).val();

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

});

Get () işlevini çağırmanız yeterlidir ve diziniz özelliklerde yazıldığı gibi elde edilir: http://api.jquery.com/map/

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

18

İşlevinizin .toArray()sonuna eklemeniz gerekiyor.map()

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

Demo: http://jsfiddle.net/sZQtL/


10

Kodunuzu biraz yeniden düzenledim ve aradığınız çözümle geldiğime inanıyorum. Temel olarak ayarlamanın searchIDssonucu olarak ayarlamak yerine .map(), değerleri bir diziye ittim.

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

  var searchIDs = [];

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

  console.log(searchIDs);
});

Kodun çalıştığı bir keman yarattım .


5
     var ids = [];

$('input[id="find-table"]:checked').each(function() {
   ids.push(this.value); 
});

Bu benim için çalıştı!


1

Form gerçekten gönderilmiş gibi, javascript nesnesinde bir dizi olmak için HTML'de bir dizi olarak adlandırılan form öğelerinin gerekli olması.

Aşağıdaki gibi birden çok onay kutusu olan bir form varsa:

<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.'/>
...

Sonuç şunlara sahip bir nesnedir:

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();
});

Ve burada kodumu geliştirmeye yardımcı olan tonlarca cevap var, ancak bunlar ya çok karmaşıktı ya da tam olarak istediğimi yapmıyorlardı: jQuery ile form verilerini JavaScript nesnesine dönüştürün

Çalışır, ancak geliştirilebilir: yalnızca tek boyutlu diziler üzerinde çalışır ve ortaya çıkan dizinler sıralı olmayabilir. Bir dizinin length özelliği, gerçekte uzunluğu değil, dizinin uzunluğu olarak sonraki dizin numarasını döndürür.

Umarım bu yardımcı olmuştur. Namaste!


1
var idsArr = [];

$('#tableID').find('input[type=checkbox]:checked').each(function() {
    idsArr .push(this.value);
});

console.log(idsArr);

0

"Her" kelimesini kullanmayın. Aynı elemandaki işlemler ve değişiklikler için kullanılır. Öğe gövdesinden veri ayıklamak ve başka bir yerde kullanmak için "harita" kullanın.


JQuery belgelerinde çoğu şey için harika örnekler varmap
jinglesthula

0

burada, sayfalardaki onay kutuları sınıfına izin verir ve var, bunları bir dizide toplamasına izin verir ve for döngüsünde doğru kontrol edilip edilmediğini kontrol edebilir ve ardından istediğiniz işlemi tek tek gerçekleştirebilirsiniz. Burada özel geçerlilik belirledim. Sorununuzu çözeceğini düşünüyorum.

  $(".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("");
        }
   }

}); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.