2016-12-06 3 views
1

Ich schreibe einen JS-Code, der die Checkboxen in einem bestimmten liest, überprüft, ob sie ausgewählt sind, und wenn ja, hängt ihren Wert an eine Zeichenfolge an. Dies ist der Code, den ich habe:JavaScript concat() -Methode fügt Zeilenumbruch nach dem Zufallsprinzip

var checkboxArr = document.querySelectorAll('#div_name input[type="checkbox"]'); 
    var str=""; 
    for(var i =0; i< checkboxArr.length;i++){ 
     var cb = checkboxArr[i]; 
     if(cb.checked){ 
      var newVal=cb.value; 
      str=str.concat(newVal); 
      str=str.concat(","); 
     } 
    } 
    alert(str); 

Die Zeichenfolge, die ich erhalte, ist:

value1 
,value2 
,value3 

Wie werden diese Zeilenumbrüche in der Zeichenfolge zu kommen?

Auch das Auftreten dieser Zeilenumbrüche ist zufällig - manchmal erscheinen sie, manchmal bekomme ich die gewünschte Zeichenfolge.

Ich habe auch versucht, die concat() Anrufe in 1 Anweisung zu kombinieren, und ich habe auch den Operator +=, aber kein Glück.

Jede Anleitung wird ernsthaft geschätzt. Danke

+0

Können Sie Ihre HTML einfügen? – 31piy

+1

überprüfen Sie die Seite Quelle im Browser (in der Regel Strg + U in guten Browsern) - sehen Sie sich die "Wert =" was auch immer "' für die Kontrollkästchen ... ist das letzte '" 'in einer neuen Zeile? Auch, ich vermute die Werte sind eigentlich nicht so kurz und du fälschst einfach die Warnung falsch (auch hast du kein abschließendes ',' in der Beispielausgabe, die du sicherlich deinen Code erhalten würdest) - benutze console.log anstelle von alert, schau ob der Die gleichen mysteriösen neuen Zeilen erscheinen in der Konsole –

Antwort

2

Das ist alles was Sie brauchen. Verwenden js rechts: D

var checkboxArr = document.querySelectorAll('#div_name input[type="checkbox"]'); 
var str = []; 

checkboxArr.forEach(function(cb) { 
    if (cb.checked) str.push(cb.value); 
});  

alert(str.join(', ')); 

und wenn Sie immer noch das gleiche Ergebnis überprüfen Sie Ihre html Code. Es scheint, wie Sie Linie Recht brechen nach dem Wert in Checkbox

+1

'filter' und' map' wäre schöner ..;) – TryingToImprove

+0

yep, vielleicht. aber 'forEach' ist immer einfacher für noobies – ixpl0

+0

' concat - ist Array-Methode, nicht String-Methode' - dann würde sein Code ** gar nicht funktionieren ** - entsprechend Ihrer Logik, [String # concat] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat) existiert nicht, aber es funktioniert, und fügt eine neue Zeile für Ihr Problem hinzu –

1

Check-Implementierung mit ES6, nicht sicher, warum Sie new line bekommen,

var btn = document.getElementById('btn'); 
 

 
btn.onclick = function(){ 
 
var checkboxArr = document.querySelectorAll('#div_name input[type="checkbox"]:checked'); 
 
    var res = Array.from(checkboxArr).map(cb => cb.value.trim()).join(',') 
 
    console.log(res) 
 
}
<div id="div_name"> 
 
    <input type="checkbox" value="cb_1" />  
 
    <input type="checkbox" value="cb_2" />  
 
    <input type="checkbox" value="cb_3" />  
 
    <input type="checkbox" value="cb_4" />  
 
    <input type="checkbox" value="cb_5" />  
 
</div> 
 
<button id="btn">Check</button>

Verwandte Themen