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



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.


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

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

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>

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');

14

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

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

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


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

12

Wersja ES6:

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


5

Czysty JavaScript bez tymczasowych zmiennych:

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

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

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>


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

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>

1

Użyj tego:

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

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>


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,

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>

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


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());
    });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.