2016-05-11 5 views
0

Я пытаюсь получить значение типа ввода из полей ввода, которые были сгенерированы инфраструктурой веб-магазина. Я не могу изменить html. Когда я добавил поле создает это:для каждого типа ввода получить значение с помощью 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"> 

Я нашел некоторый код, который получает значение, основанное на входном идентификаторе, за исключением того, что фильтр в идентификаторах _... может измениться, и различны для каждого магазина.

любые sugestions? вот что я собрал до сих пор.

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

+0

может быть, 'document.querySelectorAll ('ввода [тип = "флажок"]');' полезно здесь. Он вернет вам список узлов, содержащий все флажки типа ввода. Затем вы можете перебрать их и получить значения. – Shilly

ответ

3

Вы были на правильном пути с .getElementById, но вы хотите вместо этого, .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

Ты так много, работает как шарм! –

1

Вы можете получить входы по имени тега, то итерацию над ним.

var inputs, index, len; 

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

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

@Downvoter Что не так с этим подходом? – DDan

+0

Я не дубликат, но ваше решение выбирает больше элементов, чем необходимо. Использование 'getElementsByName()' приведет к тому, что число элементов будет циклическим, и поэтому будет быстрее. – RST

+0

это неправильное решение, на странице html может быть много полей ввода, метод getElementsByTagName() не может ориентироваться на определенные элементы. – Girish

2

С помощью document.querySelectorAll, в котором вы можете использовать любой селектор CSS с, в том числе в "attribute starts with" селектор, как input[id^="filter_"] должны получить вашу работу.

Вот демонстрационный

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 раствор Jquery

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

OP указывает, что идентификатор не всегда является «фильтром _...» –

+0

@VelimirTchatchevsky OP утверждает, что только часть после подчеркивания может измениться, как 'filter_xxx' –

+0

@VelimirTchatchevsky, OP говорит для суффикса id (filter _....) можно изменить, но это тоже неверно, OP ищет решение в javascript – Girish

Смежные вопросы