Pobieranie wszystkich zaznaczonych pól wyboru w tablicy

168

Więc mam te pola wyboru:

<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" />

I tak dalej. Jest ich około 6 i są ręcznie kodowane (tj. Nie są pobierane z bazy danych), więc prawdopodobnie przez jakiś czas pozostaną takie same.

Moje pytanie brzmi, jak mogę je wszystkie uzyskać w tablicy (w javascript), aby móc ich używać podczas wykonywania $.postżądania AJAX za pomocą Jquery.

jakieś pomysły?

Edycja: chciałbym, aby tylko zaznaczone pola wyboru zostały dodane do tablicy

Kliknij opcję Głos za
źródło
Możliwy duplikat tablicy wielokrotnych pól wyboru jQuery
Jason C
Podczas gdy drugie pytanie jest nowsze i to jest bardziej popularne, drugie ma lepszy, bardziej zwięzły zbiór odpowiedzi (w tym strategie tutaj i niektóre).
Jason C,

Odpowiedzi:

331

Sformatowany:

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

Miejmy nadzieję, że zadziała.

ybo
źródło
1
i co zrobić, jeśli odznaczysz pole wyboru, aby usunąć wartość z tablicy
Jubin Patel
@JubinPatel wystarczy zresetować tablicę przed tym kodem. yourArray = []
RRK,
11
Możesz także natychmiast zdefiniować swoją tablicę, używając mapzamiast 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 o
50
var chk_arr =  document.getElementsByName("chkRights[]");
var chklength = chk_arr.length;             

for(k=0;k< chklength;k++)
{
    chk_arr[k].checked = false;
} 
Milind
źródło
6
Jak rozumiem powyższy kod, iteruje on przez wszystkie pola wyboru i odznacza je. Jak ta odpowiedź ma się do pytania?
Terite
2
To po prostu przechodzi przez pola wyboru i odznacza je. Aby uzyskać poprawną odpowiedź, w VanillaJS, zobacz odpowiedź zahid ullah poniżej.
jmknoll
2
Jak to odpowiada na pytanie? Robi to coś zupełnie niezwiązanego z tym, o co się prosi. Dlaczego jest tyle głosów za? Czy coś mi umknęło, czy też pytanie zostało zredagowane po tym, jak ludzie je pozytywnie ocenili?
Shubham Chaudhary
46

Czysty JS

Dla tych, którzy nie chcą używać 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
źródło
5
Zawsze uwielbiam waniliową odpowiedź JS.
formicini
39

Nie testowałem tego, ale powinno działać

<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
źródło
push, aby dodać wartość w tablicy, ale co usunąć po odznaczeniu?
Jubin Patel,
24

To powinno załatwić sprawę:

$('input:checked');

Wydaje mi się, że nie masz innych elementów, które można sprawdzić, ale jeśli tak, musisz to sprecyzować:

$('input:checkbox:checked');

$('input:checkbox').filter(':checked');
Georg Schölly
źródło
14

W MooTools 1.3 (najpóźniej w momencie pisania):

var array = [];
$$("input[type=checkbox]:checked").each(function(i){
    array.push( i.value );
});
LeeGee
źródło
7
Nie zdawałem sobie sprawy, że wiek pytania lub charakter rozwiązania był istotny.
LeeGee
4
Ponieważ znalazłem to pytanie, szukając odpowiedzi na ten sam problem za pomocą MooTools.
LeeGee
Zauważ, że ta odpowiedź odnosi się do MooTools 1.3, a nie do jQuery.
LeeGee,
13

Jeśli chcesz użyć waniliowego JS, możesz to zrobić podobnie do @ zahid-ullah, ale unikając pętli:

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

Ten sam kod w ES6 wygląda o wiele lepiej:

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

Terite
źródło
12

W Javascript wyglądałoby to tak (link demonstracyjny) :

// 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
źródło
12

Wersja ES6:

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

quotesBro
źródło
5

Czysty JavaScript bez tymczasowych zmiennych:

Array.from(document.querySelectorAll("input[type=checkbox][name=type]:checked")).map(e => e.value)
Wilberta
źródło
najbardziej zwięzłe rozwiązanie przy użyciu wanilii JS
M. Mufti
3
var checkedValues = $('input:checkbox.vdrSelected:checked').map(function () {
        return this.value;
    }).get();
Jean-Marc Amon
źródło
3

Po zaznaczeniu dodaj wartość do pola wyboru, a po odliczeniu odejmij wartość

$('#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
źródło
Dodaj trochę wyjaśnienia do swojej odpowiedzi. Odpowiedzi w postaci czystego kodu zwykle nie są przydatne.
sjaustirni
3

Innym sposobem na zrobienie tego za pomocą vanilla JS w nowoczesnych przeglądarkach (brak obsługi IE i niestety brak obsługi iOS Safari w momencie pisania) jest użycie 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
foz
źródło
1

Korzystanie z Jquery

Musisz tylko dodać klasę do każdego wejścia, mam dodać klasę "source", możesz to oczywiście zmienić

<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
źródło
1

Użyj tego:

var arr = $('input:checkbox:checked').map(function () {
  return this.value;
}).get();
MHK
źródło
0

Użyj komentowanego bloku if, aby zapobiec dodawaniu wartości, które już znajdują się w tablicy, jeśli używasz przycisku kliknięcia lub czegoś, co uruchamia wstawianie

$('#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
źródło
0

Możesz spróbować czegoś takiego:

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

Tutaj

$('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
źródło
0

oto mój kod na ten sam problem, ktoś też może spróbować. 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
źródło
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
źródło
Aby uzyskać użyteczną odpowiedź, tę reakcję należy rozszerzyć. Wyjaśnij, dlaczego jest to odpowiedź na pytanie.
Jeroen Heier
Witamy w Stack Overflow i dziękujemy za Twój wkład! Byłoby miło, gdybyś przeczytał ten przewodnik Jak napisać dobrą odpowiedź i odpowiednio ją dostosować. Dzięki!
David
0
var array = []
    $("input:checkbox[name=type]:checked").each(function(){
        array.push($(this).val());
    });
Salione
źródło