2016-05-11 11 views
0

Ich versuche, die Eingabe Typ Werte aus Eingabefelder, die von einem Webshop-Framework generiert wurden. Ich kann den HTML nicht ändern. Wenn ich Felder hinzugefügt schafft es das:für jeden Eingangstyp erhalten Wert mit Javascript

<input id="filter_15" type="checkbox" name="filter[]" value="15"> 
<input id="filter_16" type="checkbox" name="filter[]" value="16"> 
<input id="filter_17" type="checkbox" name="filter[]" value="17"> 

ich einen Code gefunden, die den Wert am Eingang ID basiert wird, mit der Ausnahme, dass die Filter id _... ändern können, und für jedes Geschäft sind unterschiedlich.

irgendwelche Vorschläge? Hier ist, was ich bisher gesammelt habe.

<script type="text/javascript"> 
var filter; 
function onload() { 
    filter = document.getElementById('filter'); 
} 
function show() { 
    alert(filter.value); 
} 

+0

vielleicht 'document.querySelectorAll ('input [type = "checkbox"]');' ist hier nützlich. Es gibt Ihre a-Liste zurück, die alle Eingaben des Typs enthält. Dann können Sie sie durchlaufen und die Werte erhalten. – Shilly

Antwort

3

Sie waren auf dem richtigen Weg mit .getElementById, aber Sie wollen stattdessen .getElementsByName.

var els = document.getElementsByName("filter[]"); 
 

 
for (var i = 0; i < els.length; i++) 
 
    alert(els[i].value);
<input id="filter_15" type="checkbox" name="filter[]" value="15"> 
 
<input id="filter_16" type="checkbox" name="filter[]" value="16"> 
 
<input id="filter_17" type="checkbox" name="filter[]" value="17">

+0

Ty so viel, wirkt wie ein Zauber! –

1

können Sie Eingaben erhalten, indem Tag-Namen, dann über sie iterieren.

var inputs, index, len; 

    inputs = document.getElementsByTagName('input'); 
    len = inputs.length; 

    for (index = 0; index < len; ++index) { 
     alert(inputs[index].value) 
    } 
+0

@Downvoter Was ist falsch an diesem Ansatz? – DDan

+0

Ich bin nicht der Downvoter, aber Ihre Lösung wählt mehr Elemente als nötig. Die Benutzung von 'getElementsByName()' verringert die Anzahl der durchlaufenen Elemente und ist daher schneller. – RST

+0

es ist nicht die richtige Lösung, die HTML-Seite kann viele Eingabefelder sein, 'getElementsByTagName()' Methode kann nicht gezielt auf bestimmte Elemente. – Girish

2

von document.querySelectorAll verwenden, in dem Sie alle CSS-Selektor mit, darunter ein "attribute starts with" Selektor wie input[id^="filter_"] Ihre Arbeit muss erledigen können. Hier

ist eine Demo

var inputs = document.querySelectorAll('input[id^="filter_"]'); 
 
debugger; 
 
for (i = 0; i < inputs.length; i++) { 
 
    alert(inputs[i].value) 
 
}
<input id="filter_15" type="checkbox" name="filter[]" value="15"> 
 
<input id="filter_16" type="checkbox" name="filter[]" value="16"> 
 
<input id="filter_17" type="checkbox" name="filter[]" value="17">

1

Heres die JQuery Lösung

$('input [id^="filter_"]').each(function(){ 
    alert($(this).val()); 
}); 
+0

OP besagt, dass die ID ist nicht immer "Filter _..." –

+0

@VelimirTchatchevsky die OP besagt, dass nur der Teil nach dem Unterstrich wie 'filter_xxx' –

+0

@VelimirTchatchevsky ändern kann, sagt OP für ID-Suffix (Filter _....) kann geändert werden, aber es ist auch nicht richtige Antwort, OP sucht Lösung in Javascript – Girish

Verwandte Themen