Mendapatkan semua kotak centang yang dipilih dalam sebuah array


168

Jadi saya punya kotak centang ini:

<input type="checkbox" name="type" value="4" />
<input type="checkbox" name="type" value="3" />
<input type="checkbox" name="type" value="1" />
<input type="checkbox" name="type" value="5" />

Dan seterusnya. Ada sekitar 6 dari mereka dan kode tangan (yaitu tidak diambil dari db) sehingga mereka cenderung tetap sama untuk sementara waktu.

Pertanyaan saya adalah bagaimana saya bisa mendapatkan semuanya dalam sebuah array (dalam javascript), jadi saya bisa menggunakannya saat membuat $.postpermintaan AJAX menggunakan Jquery.

Adakah pikiran?

Sunting: Saya hanya ingin kotak centang yang dipilih ditambahkan ke array



Sementara pertanyaan lain lebih baru dan yang satu ini lebih populer, yang lain memiliki kumpulan jawaban yang lebih baik, lebih ringkas (termasuk strategi di sini, ditambah beberapa).
Jason C

Jawaban:


331

Diformat:

$("input:checkbox[name=type]:checked").each(function(){
    yourArray.push($(this).val());
});

Semoga ini berhasil.


1
dan apa yang harus dilakukan jika tidak dicentang kotak centang, untuk menghapus nilai dari array
Jubin Patel

@JubinPatel Anda hanya perlu mengatur ulang array sebelum kode ini. yourArray = []
RRK

11
Anda juga dapat langsung menentukan array menggunakan mapbukan each:var yourArray = $("input:checkbox[name=type]:checked").map(function(){return $(this).val()}).get()
Duvrai

3
function get_selected_checkboxes_array(){ var ch_list=Array(); $("input:checkbox[type=checkbox]:checked").each(function(){ch_list.push($(this).val());}); return ch_list; }
M pada

50
var chk_arr =  document.getElementsByName("chkRights[]");
var chklength = chk_arr.length;             

for(k=0;k< chklength;k++)
{
    chk_arr[k].checked = false;
} 

6
Seperti yang saya pahami kode di atas, iterates melalui semua kotak centang dan hapus centang. Bagaimana jawaban ini terhubung dengan pertanyaan?
Terite

2
Ini hanya loop melalui kotak centang dan tidak mencentangnya. Untuk jawaban yang benar, di VanillaJS, silakan lihat jawaban zahid ullah di bawah ini.
jmknoll

2
Bagaimana ini menjawab pertanyaan? Ini melakukan sesuatu yang sama sekali tidak berhubungan dengan apa yang diminta. Mengapa ada begitu banyak upvotes? Apakah saya melewatkan sesuatu, atau pertanyaan diedit setelah orang-orang mengangkatnya?
Shubham Chaudhary

46

JS murni

Bagi mereka yang tidak ingin menggunakan jQuery

var array = []
var checkboxes = document.querySelectorAll('input[type=checkbox]:checked')

for (var i = 0; i < checkboxes.length; i++) {
  array.push(checkboxes[i].value)
}

5
Selalu suka jawaban vanilla JS.
formicini

39

Saya tidak mengujinya tetapi harus bekerja

<script type="text/javascript">
var selected = new Array();

$(document).ready(function() {

  $("input:checkbox[name=type]:checked").each(function() {
       selected.push($(this).val());
  });

});

</script>

dorong untuk menambah nilai dalam array tetapi apa yang harus dihapus pada hapus centang?
Jubin Patel

24

Ini harus melakukan trik:

$('input:checked');

Saya tidak berpikir Anda memiliki elemen lain yang dapat diperiksa, tetapi jika Anda melakukannya, Anda harus membuatnya lebih spesifik:

$('input:checkbox:checked');

$('input:checkbox').filter(':checked');

14

Di MooTools 1.3 (terbaru pada saat penulisan):

var array = [];
$$("input[type=checkbox]:checked").each(function(i){
    array.push( i.value );
});

7
Tidak menyadari usia pertanyaan atau sifat solusi itu relevan.
LeeGee

4
Karena saya menemukan pertanyaan ini ketika mencari jawaban untuk masalah yang sama menggunakan MooTools.
LeeGee

Perhatikan bahwa jawaban ini terkait dengan MooTools 1.3, bukan jQuery.
LeeGee

13

Jika Anda ingin menggunakan vanilla JS, Anda dapat melakukannya dengan cara yang sama dengan @ zahid-ullah, tetapi menghindari satu loop:

  var values = [].filter.call(document.getElementsByName('fruits[]'), function(c) {
    return c.checked;
  }).map(function(c) {
    return c.value;
  });

Kode yang sama di ES6 terlihat jauh lebih baik:

var values = [].filter.call(document.getElementsByName('fruits[]'), (c) => c.checked).map(c => c.value);


12

Dalam Javascript akan seperti ini (Tautan Demo) :

// get selected checkboxes
function getSelectedChbox(frm) {
  var selchbox = [];// array that will store the value of selected checkboxes
  // gets all the input tags in frm, and their number
  var inpfields = frm.getElementsByTagName('input');
  var nr_inpfields = inpfields.length;
  // traverse the inpfields elements, and adds the value of selected (checked) checkbox in selchbox
  for(var i=0; i<nr_inpfields; i++) {
    if(inpfields[i].type == 'checkbox' && inpfields[i].checked == true) selchbox.push(inpfields[i].value);
  }
  return selchbox;
}   

12

Versi ES6:

const values = Array
  .from(document.querySelectorAll('input[type="checkbox"]'))
  .filter((checkbox) => checkbox.checked)
  .map((checkbox) => checkbox.value);


5

JavaScript murni tanpa perlu variabel sementara:

Array.from(document.querySelectorAll("input[type=checkbox][name=type]:checked")).map(e => e.value)

solusi paling ringkas menggunakan vanilla JS
M. Mufti

3
var checkedValues = $('input:checkbox.vdrSelected:checked').map(function () {
        return this.value;
    }).get();

3

Saat memeriksa tambahkan nilai untuk kotak centang dan pada penguraian kurangi nilai

$('#myDiv').change(function() {
  var values = 0.00;
  {
    $('#myDiv :checked').each(function() {
      //if(values.indexOf($(this).val()) === -1){
      values=values+parseFloat(($(this).val()));
      // }
    });
    console.log( parseFloat(values));
  }
});
<div id="myDiv">
  <input type="checkbox" name="type" value="4.00" />
  <input type="checkbox" name="type" value="3.75" />
  <input type="checkbox" name="type" value="1.25" />
  <input type="checkbox" name="type" value="5.50" />
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>


Harap tambahkan sedikit penjelasan pada jawaban Anda. Jawaban kode murni biasanya tidak berguna.
sjaustirni

3

Cara lain untuk melakukan ini dengan vanilla JS di browser modern (tidak ada dukungan IE, dan sayangnya tidak ada dukungan iOS Safari pada saat penulisan) adalah dengan FormData.getAll () :

var formdata   = new FormData(document.getElementById("myform"));
var allchecked = formdata.getAll("type"); // "type" is the input name in the question

// allchecked is ["1","3","4","5"]  -- if indeed all are checked

1

Menggunakan Jquery

Anda hanya perlu menambahkan kelas ke setiap input, saya harus menambahkan kelas "sumber" Anda dapat mengubahnya tentu saja

<input class="source" type="checkbox" name="type" value="4" />
<input class="source" type="checkbox" name="type" value="3" />
<input class="source" type="checkbox" name="type" value="1" />
<input class="source" type="checkbox" name="type" value="5" />

<script type="text/javascript">
$(document).ready(function() {
    var selected_value = []; // initialize empty array 
    $(".source:checked").each(function(){
        selected_value.push($(this).val());
    });
    console.log(selected_value); //Press F12 to see all selected values
});
</script>

1

Gunakan ini:

var arr = $('input:checkbox:checked').map(function () {
  return this.value;
}).get();

0

Gunakan komentar jika blok untuk mencegah nilai tambah yang sudah ada dalam array jika Anda menggunakan klik tombol atau sesuatu untuk menjalankan penyisipan

$('#myDiv').change(function() {
  var values = [];
  {
    $('#myDiv :checked').each(function() {
      //if(values.indexOf($(this).val()) === -1){
      values.push($(this).val());
      // }
    });
    console.log(values);
  }
});
<div id="myDiv">
  <input type="checkbox" name="type" value="4" />
  <input type="checkbox" name="type" value="3" />
  <input type="checkbox" name="type" value="1" />
  <input type="checkbox" name="type" value="5" />
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>


0

Anda dapat mencoba sesuatu seperti ini:

$('input[type="checkbox"]').change(function(){
       var checkedValue = $('input:checkbox:checked').map(function(){
                return this.value;
            }).get();         
            alert(checkedValue);   //display selected checkbox value     
 })

Sini

$('input[type="checkbox"]').change(function() call when any checkbox checked or unchecked, after this
$('input:checkbox:checked').map(function()  looping on all checkbox,

0

di sini adalah kode saya untuk masalah yang sama seseorang juga dapat mencoba ini. jquery

<script>
$(document).ready(function(){`
$(".check11").change(function(){
var favorite1 = [];        
$.each($("input[name='check1']:checked"), function(){                    
favorite1.push($(this).val());
document.getElementById("countch1").innerHTML=favorite1;
});
});
});
</script>

0

function selectedValues(ele){
  var arr = [];
  for(var i = 0; i < ele.length; i++){
    if(ele[i].type == 'checkbox' && ele[i].checked){
      arr.push(ele[i].value);
    }
  }
  return arr;
}


Untuk jawaban yang bermanfaat, reaksi ini perlu diperpanjang. Jelaskan mengapa ini adalah jawaban untuk pertanyaan itu.
Jeroen Heier

Selamat datang di Stack Overflow dan terima kasih atas kontribusi Anda! Alangkah baiknya jika Anda membaca panduan ini. Cara menulis jawaban yang baik dan menyesuaikan jawaban Anda. Terima kasih!
David

0
var array = []
    $("input:checkbox[name=type]:checked").each(function(){
        array.push($(this).val());
    });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.