배열에서 선택한 모든 확인란을 가져 오기


168

따라서 다음 확인란이 있습니다.

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

등등. 그중 약 6 개가 있으며 수작업으로 코딩되어 (즉, db에서 가져 오지 않음) 잠시 동안 동일하게 유지 될 수 있습니다.

내 질문은 배열 (자바 스크립트)으로 모두 가져올 수 있으므로 $.postJquery를 사용하여 AJAX 요청 을하는 동안 사용할 수 있습니다 .

이견있는 사람?

편집 : 선택한 확인란 만 배열에 추가하고 싶습니다.



다른 질문 은 더 새롭고이 질문 은 더 인기가 있지만, 다른 질문 은 더 나은, 간결한 답변 모음 (여기에 전략 포함)이 있습니다.
Jason C

답변:


331

형식 :

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

잘하면, 그것은 작동합니다.


1
및 확인란의 선택을 취소하면 배열에서 값을 제거하는 방법
Jubin Patel

@ JubinPatel 은이 코드 전에 배열을 재설정해야합니다. yourArray = []
RRK

11
다음 map대신에 즉시 배열을 정의 할 수도 있습니다 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 at

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

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

6
위의 코드를 이해하면 모든 확인란을 반복하고 선택 취소합니다. 이 답변이 질문과 어떻게 연결되어 있습니까?
Terite

2
이것은 단순히 확인란을 반복하고 선택을 해제합니다. 정답은 VanillaJS에서 아래 zahid ullah의 답변을 참조하십시오.
jmknoll

2
이 질문에 어떻게 대답합니까? 이것은 요청 된 것과 완전히 관련이없는 것을 수행합니다. 왜 그렇게 많은 투표가 있습니까? 내가 뭔가를 놓쳤습니까, 아니면 사람들이 질문을 올린 후에 편집 한 질문입니까?
Shubham Chaudhary

46

순수한 JS

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
항상 바닐라 JS 답변을 좋아하십시오.
formicini

39

나는 그것을 테스트하지 않았지만 작동해야합니다.

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

$(document).ready(function() {

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

});

</script>

배열에 값을 추가하려면 밀어 넣으십시오.
Jubin Patel

24

트릭을 수행해야합니다.

$('input:checked');

나는 당신이 확인할 수있는 다른 요소를 가지고 있다고 생각하지 않지만, 그렇게하면 더 구체적으로 만들어야합니다.

$('input:checkbox:checked');

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

14

MooTools 1.3 (작성 시점에서 최신) :

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

7
질문의 나이 또는 솔루션의 성격이 관련이 있다는 것을 몰랐습니다.
LeeGee

4
MooTools를 사용하여 동일한 문제에 대한 답을 찾을 때이 질문을 찾았 기 때문에.
LeeGee

이 답변은 jQuery가 아니라 MooTools 1.3과 관련이 있습니다.
LeeGee

13

바닐라 JS를 사용하려면 @ zahid-ullah와 비슷하지만 루프를 피할 수 있습니다.

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

ES6의 동일한 코드가 더 좋아 보입니다.

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


12

Javascript에서는 다음과 같습니다 (Demo Link) :

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

ES6 버전 :

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


5

임시 변수가 필요없는 순수 JavaScript :

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

바닐라 JS를 사용하는 가장 간결한 솔루션
M. Mufti

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

3

확인할 때 확인란의 값을 추가하고 선택을 취소하면 값을 뺍니다.

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


답변에 약간의 설명을 추가하십시오. 순수한 코드 답변은 일반적으로 유용하지 않습니다.
sjaustirni

3

최신 브라우저에서 바닐라 JS를 사용 하여이 작업을 수행하는 또 다른 방법은 IE를 지원하지 않고 슬프게도 iOS Safari를 지원하지 않는 FormForm.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

Jquery 사용

모든 입력에 클래스를 추가하기 만하면됩니다. 클래스 "소스"를 추가하면 물론 변경할 수 있습니다.

<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

이것을 사용하십시오 :

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

0

버튼 클릭 또는 삽입을 실행하는 데 무언가를 사용하는 경우 이미 배열에있는 값을 추가하지 못하게하려면 주석 처리 된 if 블록을 사용하십시오

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

다음과 같이 시도해보십시오.

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

여기

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

0

여기 누군가가 시도 할 수있는 동일한 문제에 대한 내 코드가 있습니다. 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;
}


유용한 답변을 얻으려면이 반응을 확장해야합니다. 이것이 왜 질문에 대한 답인지 설명하십시오.
Jeroen Heier

Stack Overflow에 오신 것을 환영합니다. 이 안내서를 읽으면 좋을 것입니다. 정답을 작성하고 그에 따라 을 조정 하는 방법 . 감사!
David

0
var array = []
    $("input:checkbox[name=type]:checked").each(function(){
        array.push($(this).val());
    });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.