Парсер форма на JavaScript


Я пытаюсь сделать универсальный парсер форма для JavaScript. Идея в том, девелопер может отказаться от функции к форме и отправить через AJAX или что-то делать с формой, к тому же представить его. Результат будет в тот же формат используется в строке запроса.

То, что я написал работает, так что я в основном интересно, если это хороший дизайн? Что можно улучшить? Спасибо за помощь!

function test_submit(id){
    var results=[],form=document.getElementById(id);
    for(var i=0;i<form.elements.length;++i){
        var obj=form.elements[i];
        if(obj.name&&!obj.disabled){
            switch(obj.tagName){
            case 'SELECT':
                for(var j=0;j<obj.length;++j){
                    if(obj.options[j].selected){
                        var value=obj.options[j].value;
                        if(!value)value=obj.options[j].text;
                        results.push(obj.name+'='+escape(value));
                    }
                }
                break;
            case 'INPUT':
            case 'TEXTAREA':
                var type=obj.type,value=obj.value;
                if(type)type=type.toLowerCase();
                if(type&&(type=='radio'||type=='checkbox')){
                    if(obj.checked)results.push(obj.name+'='+(value?escape(value):'on'));
                }
                else results.push(obj.name+'='+escape(value));
                break;
            }
        }
    }
    return results.join('&');
}


709
7
задан 30 сентября 2011 в 07:09 Источник Поделиться
Комментарии
4 ответа

Я бы изменил две вещи. Я начну, объявляя о своей Варе в одном заявлении, например:

function test_submit(id){
var q=[],
p=$(id).getElementsByTagName('SELECT');

Во-вторых, я буду использовать более описательные имена переменных, чем я, п, р, н. Если вы запустите этот код через английское сокращение Cups она сделает это за вас. Когда вы вернетесь, чтобы изменить этот код, через несколько месяцев вы хотите, чтобы точно знать, что каждая переменная является, и используя описательные имена помогают с этим.

Я бы тоже с Лири использования долларов в глобальном пространстве имен как имя переменной, так как многие популярные библиотеки, использовать его, и вы не хотите иметь каких-либо столкновений с ними.

3
ответ дан 30 сентября 2011 в 07:09 Источник Поделиться

В отношении переменных я и Джей они являются петли индекса переменных и могут быть признаны в петли один, а не в верхней. Он будет убирать код.

Пример

for (var j=0;j<obj.length;++j){...}

Лично я бы написал ее так, как это описываешь р и я , которые образуют элементы. Вдобавок нет необходимости дублировать код (Пример-3 идентичны по заявления), вы можете собрать все элементы формы и concat объединить массивы в один. Затем с помощью переключателя заявление, вы можете свести к минимуму дублировать , еслидля каждого элемента типа и исключить необходимость дублирования для отчетности. Вы можете посмотреть ниже. это намного чище.

function test_submit(id){  
var params=[],
results=[],
form=document.getElementById(id),
obj;

for(var i = 0, var formElement = form.elements[i]; i < form.elements.length; i++) {
if (formElement.name) {
switch (formElement.tagName) {
case "SELECT":
for(var j=0, var optionItem = formElement.options[j]; j < formElement.length; j++){
if(optionItem.selected){
var value = optionItem.value;
if(!value) value = optionItem.text;
params.push([formElement.name,value]);
}
}
break;
case "INPUT":
var type=formElement.type,
value=formElement.value;
if(type) type=type.toLowerCase();
if(type && (type == 'radio' || type == 'checkbox')) {
if(formElement.checked) params.push([formElement.name,value?value:'on']);
}
else params.push([formElement.name,value]);
break;
case "TEXTAREA":
params.push([formElement.name,formElement.value]);
break;
}
}
}
for (var i in params) results.push(params[i][0]+'='+escape(params[i][1]));
return results.join('&');
}

2
ответ дан 1 октября 2011 в 12:10 Источник Поделиться

Элегантное решение в целом. Попробуйте jQuery, как это имеет некоторые интересные особенности, которые могут позволить вам сделать это в один-вкладыши. Код-на брата.

1
ответ дан 8 октября 2011 в 02:10 Источник Поделиться

Несколько вещей:

1 я хотел бы видеть его обрабатывать поля пароль отдельно: вы, возможно, захотите, чтобы обработать их в некотором роде, запутывания, проверки, испытания прочности и т. д.

2 Лично я бы избежать, используя 'форма' в качестве имени переменной. Просто ради моего собственного здравомыслия, если ничего другого.

3 что если элементы формы имеют названиес?

0
ответ дан 4 октября 2011 в 09:10 Источник Поделиться