Как преобразовать данные формы в объект с помощью MooTools - PullRequest
12 голосов
/ 30 января 2010

Я хотел бы преобразовать всю форму данных в объект javascript.

<form id='myform'>
   <input type='text' name='field1' value='foo'>
   <input type='text' name='field2' value='bar'>
</form>

конвертируется в объект javascript ...

{
   field1: 'foo',
   field2: 'bar'
}

Ответы [ 6 ]

29 голосов
/ 31 декабря 2010

В MooTools вы можете легко сделать, как преобразовать все значения форм в Объект:

var formObjects=$('myform').toQueryString().parseQueryString();

Преобразовать в JSON:

var formJson=JSON.encode(formObjects);
4 голосов
/ 04 ноября 2011

Мне действительно нравится сочетание ответа Димитра Кристоффа и Треблы:

Element.implement({
    toJSON: function(){
        var j = {};
        Array.each(this.toQueryString().split('&'),function(a){
            var kv = a.split('=')
            j[kv[0]] = kv[1]||'';
        });
        return JSON.encode(j);
    }
});
console.log($('formular_support').toJSON());
4 голосов
/ 30 января 2010

просто напишите свой собственный метод, основываясь на источнике Element.toQueryString - что-то вроде этого (и я знаю, что имя метода - мусор, но это меньше всего вас беспокоит)

Element.implement({
    toJSON: function(){
        var json = {};
        this.getElements('input, select, textarea', true).each(function(el){
            if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
            var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
                return opt.value;
            }) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
            $splat(value).each(function(val){
                if (typeof val != 'undefined') {
                    json[el.name] = val;
                }
            });
        });
        return json;
    }
});

console.log($("myform").toJSON());

протестировано и работает нормально с формой примера - http://mootools.net/shell/ZSsVr/ - дает результат exact, который вы просили.

2 голосов
/ 14 сентября 2010

http://code.google.com/p/form2js/

проверьте это, именно то, что вам нужно, но не зависит от фреймворка

0 голосов
/ 30 января 2010

Один из способов сделать это. - Преобразование его в объект JSON

var hm = $('myform').toQueryString();
    hm = '{"'+hm+'"}'; 
    hm = hm.replace(/&/g, '","');
    hm = hm.replace(/=/g, '":"');
    var jsn = JSON.decode(hm); // jsn is ur JSON object.


<Ч />

Преобразуйте его в хэш.

Mootools имеет тип объекта с именем Hash. Вы также можете преобразовать это, выполнив следующее.

Хеш-ссылка: http://mootools.net/docs/core/Native/Hash Он установил и получил методы, и вы можете зацикливаться и делать вещи, проверяя ссылку.

var hm = $ ('myform'). ToQueryString ();

var ar = hm.split('&');
var finalo = new Hash();
ar.each(function(a, aCounter)
{
    var tmp = a.split('=');
    finalo.set(tmp[0], tmp[1]);
});

// finalo is your Hash object. Use the get() method to extract values. Check the link given above.
0 голосов
/ 30 января 2010

MooTools не поставляется с инструментом сериализации форм; я знаю, это отстой.

Однако я успешно использовал эту автономную реализацию: form2obj .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...