jQuery는 체크 박스의 값을 배열로 가져옵니다.


129

현재 확인 된 모든 확인란의 값을 가져 와서 배열에 저장하려고합니다. 지금까지 내 코드는 다음과 같습니다.

 $("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
      return $(this).val();
    });
    console.log(searchIDs);
  });

그러나 이것은 내가 필요한 것보다 더 많이 출력합니다. 나는 가치뿐만 아니라 내가 원하지 않는 다른 것들을 얻습니다.

[ "51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002", prevObject : jQuery.fn.jQuery.init [3], 컨텍스트 : 문서, jquery : "1.9.1", 생성자 : 함수, init : 함수…]

신분증 만 원합니다 (이 경우 처음 3 개 항목).

$.each값을 사용 하고 배열에 푸시 하여 원하는 출력을 얻습니다.

$("#find-table input:checkbox:checked").each(function(){ myArray.push($(this).val()); })

[ "51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002"]

그러나 나는 $.map코드 줄을 절약하고 더 예쁘기 때문에을 사용하고 싶습니다 .

감사

답변:


262

.get()마지막에 호출 하여 결과 jQuery 객체를 실제 배열로 전환하십시오.

$("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
      return $(this).val();
    }).get(); // <----
    console.log(searchIDs);
});

문서 :

반환 값은 배열을 포함하는 jQuery 객체이므로 결과에 대해 .get ()을 호출하여 기본 배열로 작업하는 것이 매우 일반적입니다.


1
에서 진정한 어레이를 기대하고있었습니다 $.map. 솔루션에 감사드립니다.
__name__은 아무도없는 경우

정말 고마워요 내가 티켓 센터에 이것을 필요로
Steven

2
내가 이것에 대해 이해하지 못하는 것은 .get()함수가 .val()jQuery 컬렉션의 각 항목 에서을 반환 할 때 필요한 이유 입니다. map전달하기 전에 jQuery 객체로 다시 전환 하기 때문 searchIDs입니까?
iconoclast

값을 배열 유형으로 얻을 수 있습니까?
krutssss


18

함수 .toArray()끝에 추가 해야 .map()합니다.

$("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
        return $(this).val();
    }).toArray();
    console.log(searchIDs);
});

데모 : http://jsfiddle.net/sZQtL/


10

나는 당신의 코드를 약간 리팩토링했고 당신이 찾고 있던 솔루션을 가지고 있다고 믿습니다. 기본적으로 값을 배열에 넣은 searchIDs결과 로 설정 하는 대신 .map().

$("#merge_button").click(function(event){
  event.preventDefault();

  var searchIDs = [];

  $("#find-table input:checkbox:checked").map(function(){
    searchIDs.push($(this).val());
  });

  console.log(searchIDs);
});

코드가 실행 되는 바이올린 을 만들었습니다 .


5
     var ids = [];

$('input[id="find-table"]:checked').each(function() {
   ids.push(this.value); 
});

이것은 나를 위해 일했습니다!


1

양식이 실제로 제출 된 것처럼 HTML에서 이름이 지정된 양식 요소가 자바 스크립트 객체의 배열이되도록 배열로 필요했습니다.

다음과 같은 여러 확인란이있는 양식이있는 경우 :

<input name='breath[0]' type='checkbox' value='presence0'/>
<input name='breath[1]' type='checkbox' value='presence1'/>
<input name='breath[2]' type='checkbox' value='presence2'/>
<input name='serenity'  type='text' value='Is within the breath.'/>
...

결과는 다음과 같은 객체입니다.

data = {
   'breath':['presence0','presence1','presence2'],
   'serenity':'Is within the breath.'
}


var $form = $(this),
    data  = {};

$form.find("input").map(function()
{
    var $el  = $(this),
        name = $el.attr("name");

    if (/radio|checkbox/i.test($el.attr('type')) && !$el.prop('checked'))return;

    if(name.indexOf('[') > -1)
    {
        var name_ar = name.split(']').join('').split('['),
            name    = name_ar[0],
            index   = name_ar[1];

        data[name]  = data[name] || [];
        data[name][index] = $el.val();
    }
    else data[name] = $el.val();
});

그리고 여기에 내 코드를 개선하는 데 도움이 된 수많은 답변이 있지만 너무 복잡하거나 내가 원하는 것을 정확히 원하지 않았습니다. jQuery를 사용하여 양식 데이터를 JavaScript 객체로 변환

작동하지만 개선 될 수 있습니다. 1 차원 배열에서만 작동하며 결과 인덱스는 순차적이지 않을 수 있습니다. 배열의 길이 속성은 실제 길이가 아닌 배열의 길이로 다음 인덱스 번호를 반환합니다.

이것이 도움이 되었기를 바랍니다. 나마스테!


1
var idsArr = [];

$('#tableID').find('input[type=checkbox]:checked').each(function() {
    idsArr .push(this.value);
});

console.log(idsArr);

0

"각"을 사용하지 마십시오. 동일한 요소의 작업 및 변경에 사용됩니다. "맵"을 사용하여 요소 본문에서 데이터를 추출하고 다른 곳에서 사용합니다.


jQuery 문서에는 다음을 포함한 대부분의 모든 것에 대한 훌륭한 예제가 있습니다map
jinglesthula

0

여기에서는 페이지의 확인란 클래스를 허용하고 var는 배열로 수집하고 for 루프에서 확인한 다음 원하는 작업을 개별적으로 수행 할 수 있습니다. 여기에서 사용자 정의 유효성을 설정했습니다. 나는 그것이 당신의 문제를 해결할 것이라고 생각합니다.

  $(".allows").click(function(){
   var allows = document.getElementsByClassName('allows');
   var chkd   = 0;  
   for(var i=0;i<allows.length;i++)
   {
       if(allows[i].checked===true)
       {
           chkd = 1;
       }else
       {

       }
   }

   if(chkd===0)
   {
       $(".allows").prop("required",true);
       for(var i=0;i<allows.length;i++)
        {
        allows[i].setCustomValidity("Please select atleast one option");
        }

   }else
   {
       $(".allows").prop("required",false);
       for(var i=0;i<allows.length;i++)
        {
        allows[i].setCustomValidity("");
        }
   }

}); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.