配列内の選択されたすべてのチェックボックスを取得する


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からフェッチされていない)ため、しばらく同じままになる可能性があります。

私の質問は、それらをすべて(JavaScriptで)配列で取得する方法です。そのため、$.postJqueryを使用してAJAX リクエストを作成するときにそれらを使用できます。

何かご意見は?

編集:選択したチェックボックスのみをアレイに追加したい



他の質問はより新しく、これはより人気がありますが、他の質問はより良い、より簡潔な回答のコレクションを持っています(ここでの戦略といくつかを含む)。
Jason C

回答:


331

フォーマット済み:

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

うまくいけば、うまくいきます。


1
チェックボックスをオフにしてアレイから値を削除するにはどうするか
Jubin Patel

@JubinPatelでは、このコードの前に配列をリセットするだけです。yourArray = []
RRK 2015年

11
また、使用してすぐに配列を定義することができますmap代わりにeachvar 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は

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

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

6
上記のコードを理解しているので、すべてのチェックボックスを繰り返し処理してチェックを外します。この回答は質問とどのように関連していますか?
テライト

2
これは単にチェックボックスをループしてチェックを外すだけです。正解については、VanillaJSで、下のzahid ullahの回答を参照してください。
jmknoll 2016

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 2013

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では次のようになります(デモリンク)

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

チェックするとチェックボックスの値が追加され、チェックを外すと値が減算されます

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

3

最新のブラウザーでバニラJSを使用してこれを行う別の方法(執筆時点ではIEサポートなし、残念ながらiOS Safariサポートなし)は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

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.