Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обход всех инпутов в форме. (https://javascript.ru/forum/dom-window/39500-obkhod-vsekh-inputov-v-forme.html)

HaseProgram 02.07.2013 14:21

Обход всех инпутов в форме.
 
Всем добрый день!
Помогите решить задачу: нужно средствами голого js (без использования библиотек, таких как jQuery) обойти все инпуты в форме и запихнуть их значения в массив. Пример:

function getData() {
data = new array();
//отбор value для всех инпутов.
//конечный массив должен быть таким:
//data = {'n1':value1,'n2':value2...};
return data;
}


<form>
<input type="text" name="n1">
<input type="text" name="n2">
<input type="text" name="n3">
<input type="text" name="n4">
<button onclick="getData()">
</form>


Заранее спасибо!

рони 02.07.2013 14:53

HaseProgram,
а может по тихоньку сами ?
нашли элементы нужные
http://learn.javascript.ru/searching-elements-dom
обошли их циклом
http://learn.javascript.ru/while-for
собрали name и value
и заполнили обьект data ваша строка 5,
а не массив строка 2
Цитата:

Сообщение от HaseProgram
data = new array();

data = {}
пробуйте - ошибётесь поправят.

danik.js 02.07.2013 14:54

<form id="form">
    <input type="text" name="n1" value="abc">
    <input type="text" name="n2" value="cde">
    <input type="text" name="n3" value="bla">
    <input type="text" name="n4" value="xyz">
    <button onclick="getData(); return false;">Get Data</button>
</form>
<script>
    function serializeForm(form) {
        var elements = Array.prototype.slice.call(form.elements);
        var data = {};
        elements.forEach(function(element){
            if (element.tagName.toLowerCase() == 'input' && element.name)
                data[element.name] = element.value;
        });
        return data;
    }
    
    function getData() {
        var data = serializeForm(document.forms.form);
        
        alert(Object.keys(data).map(function(key){return key + ':' + data[key]}));
        return false;
    }
</script>

Не будет работать в старых браузерах. Хотя это легко исправить.

HaseProgram 02.07.2013 15:05

Цитата:

Сообщение от danik.js (Сообщение 259659)
Не будет работать в старых браузерах. Хотя это легко исправить.

Спасибо за ответ, со старыми браузерами я разберусь, мне главное сама мысль. Очень помогли!)


Часовой пояс GMT +3, время: 13:18.