Как создать объект javascript из элементов формы, используя jQuery - PullRequest
3 голосов
/ 24 марта 2010

Я хотел бы иметь возможность создать объект javascript из моей HTML-формы, и мне интересно, есть ли хороший способ сделать это с помощью jquery. Я думаю, что я ищу что-то похожее на $. Serialize , но в результате получается карта вместо строки.

<form>
  <input type="text" name="foo1" value="bar1" />
  <input type="text" name="foo2" value="bar2" />
</form>

желаемый результат:

{ foo1:"bar1", foo2:"bar2" }

Ответы [ 3 ]

5 голосов
/ 24 марта 2010
var oElements = {};
$('form [name]').each(function(){
    oElements[this.name] = this.value;
});
4 голосов
/ 30 апреля 2011

Вот гораздо более здравый взгляд на предмет, который использует jQuery extractObjectFromForm принимает селектор полей, содержащих элемент и произвольный экземпляр объекта. Это работает с известными и неизвестными (ухмылками) типами ввода. Он также может создавать результаты сложных объектов, которые содержат вложенные элементы.

/**
 * Extracts form elements and maps to passed in object
 */
function    extractObjectFromForm($fieldContainer,objectType) {
    var innerArray=[];
    var obj = $.map($fieldContainer.find(":input"), function(n, i)
    {
        var o = {};
        if($(n).is("input:text") 
                || $(n).is("textarea") 
                || $(n).is("input:hidden") 
                || $(n).is("input:password"))
            o[n.name] = $(n).val();
        else if($(n).is("input:checkbox"))
            o[n.name] = ($(n).is(":checked") ? true:false);
        else if(n.type == 'radio') {
            if(innerArray.indexOf(n.name)==-1) {
                innerArray.push(n.name);
            }
        }
        else
            o[n.name] = $(n).val();
        return o;
    });
    $.each(innerArray,function(index,item){
        var iobj={};
        iobj[item]=$("input[name='"+item+"']:checked").val();
        obj.push(iobj);
    });
    return getObjectFromObject(obj,objectType);
}

/**
 * Takes a object created from a form scour and
 * converts it to an Object type
 */
function    getObjectFromObject(formObject,outputObject) {
    $.each(formObject,function(index,item){
        $.each(item,function(key,value){
            if(key.indexOf(".") == -1)
                outputObject[key] = value;
            else {
                var mainkey = key.substr(0,key.indexOf("."));
                var subkey = key.substr(key.indexOf(".")+1);
                outputObject[mainkey][subkey]=value;
            }
        });
    });
    return outputObject;
}   
1 голос
/ 24 марта 2010

Как насчет serializeArray () http://api.jquery.com/serializeArray/

Обновление: также обнаружен этот плагин, который по сути совпадает с ответом другого автора, но, похоже, он может обрабатывать вложенные массивы. http://github.com/cowboy/jquery-misc/blob/master/jquery.ba-serializeobject.js

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