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

Klik Upvote
sumber
Kemungkinan duplikat array jquery multipel kotak centang
Jason C
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.

ybo
sumber
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;
} 
Milind
sumber
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)
}
Chris Underdown
sumber
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>
Barbaros Alp
sumber
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');
Georg Schölly
sumber
14

Di MooTools 1.3 (terbaru pada saat penulisan):

var array = [];
$$("input[type=checkbox]:checked").each(function(i){
    array.push( i.value );
});
LeeGee
sumber
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);

Terite
sumber
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;
}   
zahid ullah
sumber
12

Versi ES6:

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

kutipanBro
sumber
5

JavaScript murni tanpa perlu variabel sementara:

Array.from(document.querySelectorAll("input[type=checkbox][name=type]:checked")).map(e => e.value)
Wilbert
sumber
solusi paling ringkas menggunakan vanilla JS
M. Mufti
3
var checkedValues = $('input:checkbox.vdrSelected:checked').map(function () {
        return this.value;
    }).get();
Jean-Marc Amon
sumber
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>

Joepraveen
sumber
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
teman
sumber
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>
Ahmed Al Bermawy
sumber
1

Gunakan ini:

var arr = $('input:checkbox:checked').map(function () {
  return this.value;
}).get();
MHK
sumber
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>

Nisal Edu
sumber
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,
pappu kr Sharma
sumber
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>
Rahul Gupta
sumber
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;
}

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