14.02.2012, 21:20
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Как получить все данные формы?
Нужно получить информацию всех селектов, инпутов, текстарей и пр. Конечно, это можно сделать перебором. Но, подозреваю, есть какой-нибудь метод или свойство.
|
|
14.02.2012, 21:34
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
function getFormData( form ) {
var str = '';
var gE = 'getElementsByTagName';
var inputs = [
(form[gE] ? form[gE]('input') : form.all ? form.all.tags('input') : []),
(form[gE] ? form[gE]('select') : form.all ? form.all.tags('select') : []),
(form[gE] ? form[gE]('textarea') : form.all ? form.all.tags('textarea') : [])
];
var Globals = new Array();
var fields = new Array();
for (var i = 0; i < inputs.length; i++)
{
for (j = 0; j < inputs[i].length; j++)
{
if (inputs[i][j])
{
var plus = '++'.substring(0,1);
if(escape(inputs[i][j].getAttribute('name')).replace(plus, '%2B') !== 'null')
{
fields[inputs[i][j].getAttribute('name')] = inputs[i][j];
str += escape(inputs[i][j].getAttribute('name')).replace(plus, '%2B');
str += '=' + escape(inputs[i][j].value).replace(plus, '%2B') + '&';
var names = inputs[i][j].getAttribute('name').split('[');
if ( names.length ) {
var temp = Globals;
for(k = 0; k < names.length; k++){
if (k > 0){
var name = names[k].substring(0, names[k].length - 1);
} else {
var name = names[k];
}
if (!temp[name])
{
if (k < (names.length - 1))
{
temp[name] = new Array();
} else {
temp[name] = ((inputs[i][j].value) ? inputs[i][j].value : "");
}
}
temp = temp[name];
}
}
}
}
}
}
return {"action": form.action, "request": str, "data": Globals, "fields": fields}
}
|
|
14.02.2012, 21:46
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
nasqad, спасибо, в проекте использую его, поэтому воспользуюсь.
devote, что-то много получилось буков. Но всё равно возьму на заметку.
|
|
14.02.2012, 22:14
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
devote,
А для чего вот это
var plus = '++'.substring(0,1);
Почему не просто, "+" ?
__________________
readOnly
|
|
14.02.2012, 22:15
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от FINoM
|
devote, что-то много получилось буков. Но всё равно возьму на заметку.
|
Да это я у себя в борохле вытащил, старое какое то кусок кода, давно где то копирнул... мусора то в нем полно, но что делать с этим дальше думаю поймешь
|
|
14.02.2012, 22:16
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от poorking
|
devote,
А для чего вот это
var plus = '++'.substring(0,1);
Почему не просто, "+" ?
|
Понятия не имею, не я писал этот код
|
|
14.02.2012, 22:30
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
function getData(form) {
return Array.prototype.map.call(form, function (field) {
return {
name: field.name,
value: field.value
};
});
}
Как-то так.
|
|
14.02.2012, 22:33
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от DreamTheater
|
Как-то так.
|
не особо правильно с учетом того что инпуты с типом radio и одним именем не должны попадать все в массив, а лишь то которое выбрано. Чекбоксы тоже лишь те что чекнуты. Поля с одинаковым именем вообще не должны попасть оба.
Последний раз редактировалось devote, 14.02.2012 в 22:40.
Причина: ы
|
|
14.02.2012, 22:35
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
Сообщение от devote
|
не особо правильно с учетом того что инпуты с типом radio и одним именем не должны попадать все в массив, а лишь то которое выбрано.
|
Ну это ведь в качестве примера, можно сделать дополнительную обработку для радио.
|
|
14.02.2012, 22:40
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от DreamTheater
|
Ну это ведь в качестве примера, можно сделать дополнительную обработку для радио.
|
Ну а кто бы спорил Я подал идею для примера, хоть и не писал ее сам, а дальше FINoM разберется.
|
|
|
|