Lấy tất cả các hộp kiểm được chọn trong một mảng


168

Vì vậy, tôi có những hộp kiểm này:

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

Và như thế. Có khoảng 6 trong số chúng và được mã hóa bằng tay (nghĩa là không được tìm nạp từ db) vì vậy chúng có khả năng giữ nguyên trong một thời gian.

Câu hỏi của tôi là làm thế nào tôi có thể nhận được tất cả chúng trong một mảng (trong javascript), vì vậy tôi có thể sử dụng chúng trong khi thực hiện $.postyêu cầu AJAX bằng Jquery.

Có suy nghĩ gì không?

Chỉnh sửa: Tôi chỉ muốn các hộp kiểm đã chọn được thêm vào mảng


Bản sao có thể có của nhiều hộp kiểm tra jquery
Jason C

Trong khi câu hỏi khác mới hơn và câu hỏi này phổ biến hơn, câu hỏi còn lại có bộ câu trả lời hay hơn, ngắn gọn hơn (bao gồm các chiến lược ở đây, cộng với một số).
Jason C

Câu trả lời:


331

Định dạng:

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

Hy vọng, nó sẽ làm việc.


1
và phải làm gì nếu bỏ chọn hộp kiểm, để xóa giá trị khỏi mảng
Jubin Patel

@JubinPatel bạn chỉ cần đặt lại mảng trước mã này. yourArray = []
RRK

11
Bạn cũng có thể xác định mảng của mình ngay lập tức bằng cách sử dụng mapthay vì 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 lúc

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

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

6
Theo tôi hiểu mã ở trên, nó lặp qua tất cả các hộp kiểm và bỏ chọn chúng. Làm thế nào câu trả lời này được kết nối với câu hỏi?
Terite

2
Điều này chỉ đơn giản là vòng lặp thông qua các hộp kiểm và bỏ kiểm tra chúng. Để có câu trả lời chính xác, trong VanillaJS, vui lòng xem câu trả lời của zahid ullah bên dưới.
jmknoll

2
Làm thế nào để trả lời câu hỏi này? Điều này làm một cái gì đó hoàn toàn không liên quan đến những gì được yêu cầu. Tại sao có rất nhiều upvote? Tôi có thiếu thứ gì không, hay câu hỏi đã được chỉnh sửa sau khi mọi người nâng cấp nó?
Shubham Chaudhary

46

Tinh khiết

Đối với những người không muốn sử dụng 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
Luôn luôn yêu một câu trả lời vanilla JS.
formicini

39

Tôi đã không kiểm tra nó nhưng nó sẽ hoạt động

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

$(document).ready(function() {

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

});

</script>

đẩy để thêm giá trị trong mảng nhưng những gì cần loại bỏ khi bỏ chọn?
Jubin Patel

24

Cái này cần phải dùng mẹo:

$('input:checked');

Tôi không nghĩ rằng bạn có các yếu tố khác có thể được kiểm tra, nhưng nếu có, bạn phải làm cho nó cụ thể hơn:

$('input:checkbox:checked');

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

14

Trong MooTools 1.3 (mới nhất tại thời điểm viết bài):

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

7
Không nhận ra tuổi của câu hỏi hoặc bản chất của giải pháp là có liên quan.
LeeGee

4
Bởi vì tôi đã tìm thấy câu hỏi này khi tìm câu trả lời cho cùng một vấn đề bằng cách sử dụng MooTools.
LeeGee

Lưu ý câu trả lời này liên quan đến MooTools 1.3, không phải jQuery.
LeeGee

13

Nếu bạn muốn sử dụng một vanilla JS, bạn có thể làm điều đó tương tự như @ zahid-ullah, nhưng tránh một vòng lặp:

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

Mã tương tự trong ES6 có vẻ tốt hơn:

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


12

Trong Javascript nó sẽ như thế này (Liên kết 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

Phiên bản ES6:

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


5

JavaScript thuần túy không cần biến tạm thời:

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

giải pháp ngắn gọn nhất bằng cách sử dụng vanilla JS
M. Mufti

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

3

Khi kiểm tra, thêm giá trị cho hộp kiểm và kiểm tra lại trừ đi giá trị

$('#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>


Vui lòng thêm một chút giải thích cho câu trả lời của bạn. Câu trả lời mã thuần thường không hữu ích.
sjaustirni

3

Một cách khác để làm điều này với vanilla JS trong các trình duyệt hiện đại (không hỗ trợ IE và đáng buồn là không có hỗ trợ Safari của iOS tại thời điểm viết bài) là với 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

Sử dụng Jquery

Bạn chỉ cần thêm lớp vào mỗi đầu vào, tôi đã thêm lớp "nguồn", bạn có thể thay đổi nó tất nhiên

<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

Dùng cái này:

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

0

Sử dụng nhận xét nếu chặn để ngăn thêm các giá trị đã có trong mảng nếu bạn sử dụng nhấp vào nút hoặc một cái gì đó để chạy chèn

$('#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

Bạn có thể thử một cái gì đó như thế này:

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

Đây

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

0

Đây là mã của tôi cho cùng một vấn đề mà ai đó cũng có thể thử. 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;
}


Đối với một câu trả lời hữu ích, phản ứng này cần phải được mở rộng. Giải thích tại sao đây là một câu trả lời cho câu hỏi.
Jeroen Heier

Chào mừng bạn đến với Stack Overflow và cảm ơn sự đóng góp của bạn! Sẽ thật tuyệt nếu bạn đọc hướng dẫn này Cách viết câu trả lời hay và điều chỉnh câu trả lời của bạn cho phù hợp. Cảm ơn!
David

0
var array = []
    $("input:checkbox[name=type]:checked").each(function(){
        array.push($(this).val());
    });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.