javascript - jQuery ile işaretli onay kutularının değerlerini diziye almak


Şu anda işaretlenmiş tüm onay kutularının değerlerini almaya ve bunları bir diziye kaydetmeye çalışıyorum. İşte şu ana kadar yazdığım kod:

 $("#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 fazla çıktı veriyor. Sadece değerleri almakla kalmıyor, istemediğim bazı şeyler de geliyor.

["51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002", prevObject: jQuery.fn.jQuery.init[3], context: document, jquery: "1.9.1", constructor: function, init: function…]

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

$.each kullanarak ve değerleri bir diziye ekleyerek istediğim çıktıyı elde ediyorum:

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

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

Ancak bir satır kod tasarrufu sağladığı ve daha güzel olduğu için $.map kullanmak isterim.

Teşekkürler

Cevap #1

Oluşan jQuery nesnesini gerçek bir diziye dönüştürmek için en sonda .get() metodunu çağırın.

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

Dokümantasyona göre:

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

Cevap #2

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

$(document).ready(function(){

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

      return $(this).val();

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

});

Sadece get() fonksiyonunu çağırın ve dizinizi, spesifikasyonlarda yazıldığı gibi elde edin: http://api.jquery.com/map/

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

Cevap #3

.map() fonksiyonunuzun sonuna .toArray() eklemeniz gerekiyor

$("#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/

Cevap #4

     var ids = [];

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

Bu benim için işe yaradı!

Cevap #5

Kodunuzu biraz refaktör ettim ve aradığınız çözüme ulaştığıma inanıyorum. Temelde, searchIDs'yi .map() sonucuna atamak yerine, değerleri bir diziye ekledim.

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

  var searchIDs = [];

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

  console.log(searchIDs);
});

Kodu çalıştıran bir fiddle oluşturdum.

İlgili makaleler