2016-08-03 3 views
0

チェックされたチェックボックスに関連付けられたラベルを配列(rulesArray)に設定しようとしています。私はユニークな値だけを追加するようにしています(これは!inArrayが入っています)。私はこの時点でこれがinArrayの構文が間違っていると確信しています。私の配列と "inArray"にユニークな値を追加しようとしていませんか?

現在、私のエラーは私のJSここ

$(document).ready(function(){ 
    var rulesArray = []; 
    $('input:checkbox').click(function(){ 
     $('input.selectBox').each(function(){ 
      if(($(this).is(':checked')) && (!inArray($(this).parent().text(), rulesArray))){ 
       rulesArray.push($(this).parent().text()); 
      } 
     }); 
     console.log(rulesArray); 
    }); 
}); 

は私のHTMLは、正しい方法は$.inArrayある

<div> 
    <button class="toggle_button" data-contents=".item_8"></button> 
    <ul class="contents item_8"> 
     <li><input class="selectBox" type="checkbox" id="color_1" name="color_1" value=""><label for="color_1">Red</label></li> 
     <li><input class="selectBox" type="checkbox" id="color_2" name="color_2" value=""><label for="color_2">Orange</label></li> 
     <li><input class="selectBox" type="checkbox" id="color_3" name="color_3" value=""><label for="color_3">Yellow</label></li> 
     <li><input class="selectBox" type="checkbox" id="color_4" name="color_4" value=""><label for="color_4">Green</label></li> 
     <li><input class="selectBox" type="checkbox" id="color_5" name="color_5" value=""><label for="color_5">Blue</label></li> 
    </ul> 
</div> 
+1

を使用したソリューションは、それが$ではないでしょうか? – Wolfgang

+0

$ .inArrayを使用する必要があります。あなたの現在のスコープで独自のinArrayを定義していない限り。 –

+0

ここには多くの失敗があります。特に、配列のチェックされていない要素を_remove_するロジックがありません。 – Alnitak

答えて

4

である。ここで"Uncaught ReferenceError: inArray is not defined."

ある - ないinArray - あなたはあなたのコードのカントーを短縮することができますより良いセレクターとバニラを使用してindexOfコール:

$('input.selectBox').each(function(){ 
    var isChecked = this.checked; 
    var txt = $(this).parent().text(); 
    var idx = rulesArray.indexOf(txt); 

    if (isChecked && idx === -1) { 
     rulesArray.push(txt); 
    } else if (!isChecked && idx > -1) { 
     rulesArray.splice(idx, 1); 
    } 
}); 

そして、それはjqueryのメソッドです.inArray- $.map

var rulesArray = $('input.selectBox:checked').map(function() { 
    return $(this).parent().text(); 
}).get(); 
+0

ありがとう!私は助けに感謝します。私は以前にindexOfを試み、明らかにそれを複雑にしていました。 – blazerod

+0

個人的には、私は 'Map'を使っています – Alnitak

+0

@Alnitak - これも解決策を追加しました!ありがとう! – tymeJV

関連する問題