2016-11-12 3 views
1

Ich versuche, über einige Eingabeelemente, um eine Schleife um jeden Wert zu bekommen, aber aus irgendeinem Grund bekomme ich nur die letzte:querySelectorAll loop „undefined“

<input type="text" name="input-loop" data-loop="true" /> 
<input type="text" name="input-loop" data-loop="true" /> 
<input type="text" name="input-loop" data-loop="true" /> 
<button type="button" onclick="loop()">loop</button> 
<div id="output"></div> 
<script> 
    function loop() { 
     var element = document.querySelectorAll('[data-loop="true"]'); 
     for(var i = 0; i < element.length; i++) { 
      console.log(element[i].length); 
      // or: 
      // document.getElementById('output').innerHTML = element[i].value + '<br>'; 
     } 
    } 
</script> 

Die Konsole zeigt undefined und wenn ich versuche, gib die Werte aus, ich bekomme sie nur vom letzten Element und nicht von allen. Was mache ich falsch?

Vielen Dank (und bitte mein Englisch entschuldigen)

+2

dort auf dem DOM-Elemente kein Längenattribut ist die Anzahl der Elemente ist element.length –

Antwort

4

Sie versuchen die length des Elements zu erhalten selbst:

console.log(element[i].length); 

Elemente haben keine Länge.

Ich vermute, dass Sie versuchen, die Länge des Wertes der Elemente zu erhalten:

console.log(element[i].value.length); 

function loop() { 
 
    
 
     // elements will be a "node list" containing any/all elements 
 
     // that match the query. 
 
     var elements = document.querySelectorAll('[data-loop="true"]'); 
 
     
 
     // Because it is a node list, which is an array-like object, 
 
     // it has a "length" property: 
 
     console.log("There were " + elements.length + " elements found."); 
 
     
 
     // ...And, it can be looped through 
 
     for(var i = 0; i < elements.length; i++) { 
 
      // It's contained elements are indexed and when you do that, 
 
      // you may access properties of the elements themselves 
 
      console.log(elements[i].value); 
 
      // or: 
 
      document.getElementById('output').innerHTML += elements[i].value + '<br>'; 
 
     } 
 
    }
<p>Type some text in the textboxes and then click the button:</p> 
 
<input type="text" name="input-loop" data-loop="true" /> 
 
<input type="text" name="input-loop" data-loop="true" /> 
 
<input type="text" name="input-loop" data-loop="true" /> 
 
<button type="button" onclick="loop()">loop</button> 
 
<div id="output"></div>

+0

Nein, ich versuche, die Anzahl der Elemente zu erhalten (mit 'Elemente [i] .length') zu sehen, ob es funktioniert, und es zeigt 'undefined' – natanelg97

+0

Dann wollen Sie:' console.log (Element) 'und Sie brauchen keine Schleife. –

+0

Also wie bekomme ich alle Werte (von jedem Element, ich meine: 'element [i] .value')? – natanelg97

0

zu console.log(element[i]) versuchen; Dies liegt daran, dass element eine Sammlung von DOM-Elementen ist.

Für diese Elemente gibt es keine Längeneigenschaft.

Da sie input und wenn Sie ihre value erhalten wollen, müssen Sie

element[i].value 
1

Was anmelden mache ich falsch?

console.log(element[i].length); 

element[i] bezieht sich auf eine HTMLInputElement. Es und nicht von seinen Elternklassen haben eine length Eigenschaft. Angenommen, Sie möchten die Länge des Werts des Eingabeelements anzeigen, würde Folgendes funktionieren.

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

 
function loop() { 
 
    var element = document.querySelectorAll('[data-loop="true"]'); 
 
    element.forEach((e) => { 
 
    output.innerHTML += `${e.value}: ${e.value.length}<br>`; 
 
    }); 
 
} 
 

 

 
function clearOutput(){ 
 
    output.innerHTML = ''; 
 
}
<input type="text" name="input-loop" data-loop="true" value="one" /> 
 
<input type="text" name="input-loop" data-loop="true" value="two" /> 
 
<input type="text" name="input-loop" data-loop="true" value="three" /> 
 

 
<button type="button" onclick="loop()">loop</button> 
 
<button type="button" onclick="clearOutput()">clear</button> 
 

 
<div id="output"></div>

+0

Seien Sie vorsichtig mit diesem Ansatz. Von MDN: "Obwohl NodeList kein Array ist, ist es möglich, mit forEach() zu iterieren. ** Einige ältere Browser haben diese Methode noch nicht implementiert. **" Die gleichen Browser haben Probleme mit Ihrer Pfeilfunktion und Ihrem Templated Saiten auch. Nur zu deiner Information. –

Verwandte Themen