2015-05-20 2 views
1

У меня есть страница, которая создает ряд входов на основе выбора пользователя о том, сколько создать:Загрузить из динамически созданного полей ввода

select id="noOfDirectors" name="amount" onchange="addInput();"> 
    <option value="">How Many Directors</option> 
    <option value="1" >1</option> 
    <option value="2" >2</option> 
    <option value="3" >3</option> 
    <option value="4" >4</option> 
    <option value="5" >5</option> 
    <option value="6" >6</option> 
    <option value="7" >7</option> 
    <option value="8" >8</option> 
    <option value="9" >9</option> 
    <option value="10" >10</option> 
</select> 
<div id="inputs"></div><br/> 
<button id="nod" onclick="return false">Submit</button> 

.js файл создает формы:

function addInput(){ 
noOfDirectors = $('#noOfDirectors').val(); 
var inputs = $('#inputs').empty(); 
inputs.innerHTML = ""; 
for(i = 0; i < noOfDirectors; i++) { 
    inputs.append('Director '+ (i+1) +' Name: <input type="text" name="directorName[' + i + ']" /><br/>Director '+ (i+1) +' Customer Number: <input type="text" name="directorECN['+i+']" /><br/><br/>'); 
} 
$("#nod").show(); 

directors = $('[name^=directorECN]').map(function(i) { 
//return this.name; 
    return this.value; // for real values of input 
}).get(); 


} 

$(document).ready(function() { 
    $('#nod').click(function() { 
     console.log(directors); 
    }); 
}); 

Теперь я хочу взять каждый из этих directorECN['+i+'] имен входных и добавить их в глобально объявленный массив:

var directors = new Array();

Мне сложно определить синтаксис, который работает без жесткого кодирования 10 (0-9) каждого из возможных имен ввода. Есть ли более простой способ сделать это?

Вот мои UPDATED JSFiddle

Обновленные мои JS выше. Консоль печатает [""]

+0

Вы не объяснили, зачем вам это, но звучит, как вы просто хотите сериализовать FORM, см. Https://api.jquery.com/serialize/ или https://api.jquery.com/serializearray/ –

+0

позже в коде, мне нужно перечислить в разное время после сортировки inp UTS. – jpgerb

ответ

3

Вы можете использовать .map(), чтобы получить массив из атрибута имени элементов, возвращаемых Attribute Starts With Selector [name^=”value”].

var directors = $('[name^=directorECN]').map(function(i) { 
    //return this.name; 
    return this.value; // for real values of input 
}).get(); 
+2

Не забывайте о '.get()' в конце. Он будет возвращать чистый JS-массив вместо объекта коллекции jQuery. – VisioN

+0

Спасибо @VisioN ... – Adil

+1

Я думаю, что OP имел в виду под именем фактическое значение ввода –

2

Использование .map() функции по атрибуту начинается с селектором [attribute^="value"]

var directors = $('[name^="directorECN"]').map(function() { 
    return this.name  //to get value use this.value 
}).get(); 

Updated Fiddle

+0

Как это отличается от уже отправленного ответа ??? –

+0

@A.Вольф, ответ не возвратил фактический массив 'name', который был * [отредактирован позже] (http://stackoverflow.com/posts/30344380/revisions) *, но я бы спросил, должен ли я удалить мой? –

+0

Я не мода, но я думаю, что все в порядке –

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