2016-08-03 3 views
0

Ich versuche, ein Array (rulesArray) mit den Labels zu füllen, die mit aktivierten Checkboxen verknüpft sind. Ich versuche auch sicher zu sein, dass ich nur eindeutige Werte hinzufüge (das ist, wo die !inArray hereinkommt). Ich bin mir ziemlich sicher, dass dies an dieser Stelle eine falsche Syntax für inArray ist.Der Versuch, nur eindeutige Werte zu meinem Array hinzuzufügen und "inArray" ist nicht definiert?

Derzeit mein Fehler ist "Uncaught ReferenceError: inArray is not defined."

Hier meine JS ist

$(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); 
    }); 
}); 

Hier ist mein HTML

<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

sollte nicht $ .inArray- es ist ein jquery-Methode? – Wolfgang

+0

Sie müssen $ .inArray verwenden. Es sei denn, Sie haben in Ihrem aktuellen Bereich ein eigenes inArray definiert. –

+0

Es gibt eine Menge Fehler hier, insbesondere, dass es keine Logik zu _remove_ ein ungeprüftes Element aus dem Array – Alnitak

Antwort

4

Die richtige Methode ist $.inArray - nicht inArray - Sie können Ihren Code tho verkürzen mit einem besseren Selektor und mit einem Vanille indexOf Anruf:

$('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); 
    } 
}); 

und eine Lösung es $.map

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

Vielen Dank! Ich schätze die Hilfe. Ich habe es vorher versucht und offensichtlich überkompliziert. – blazerod

+0

persönlich, würde ich eine 'Map' – Alnitak

+0

@Alnitak verwenden - Auch dafür eine Lösung hinzugefügt! Vielen Dank! – tymeJV

Verwandte Themen