Как сопоставить объект с полями формы? - PullRequest
1 голос
/ 17 июля 2011

У меня есть такой объект:

var settings = {
    Name: "Fairy Tail",
    Feature:
    {
        Translate: true,
        Share: true
    }
}

и форма

<form>
    <input type="text" name="Name" />
    <input type="checkbox" name="Feature.Translate" />
    <input type="checkbox" name="Feature.Share" />
</form>

Как сделать так, чтобы объект заполнял форму «автоматически» (без установки значения каждого поля вручную)?

Ответы [ 4 ]

3 голосов
/ 17 июля 2011

Вы можете сделать это следующим образом ( jsfiddle для более сложного примера ), предполагая, что settings переменная установлена ​​первой:

var assignValue = function(n, v){
    var field = jQuery('form input[name="'+n+'"]');
    if (field.attr('type')=='text'){
        field.val(v);
    } else if (field.attr('type')=='checkbox') {
        field.prop('checked',v);
    }
}

var assignSettings = function(list, prefix){
    if (typeof prefix != 'undefined'){
        prefix += '.';
    }else{
        prefix = '';
    }
    for (item in list){
        if ((typeof list[item]=='string')||(typeof list[item]=='boolean')){
            assignValue(prefix+item,list[item]);
        }else if(typeof list[item]=='object'){
            var n1 = item;
            assignSettings(list[n1],prefix+n1);
        }
    }
}

assignSettings(settings);

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

2 голосов
/ 17 июля 2011
var inputs = $('form input[type="checkbox"]');

$.each(settings.Feature, function(key, val) {
    inputs.filter('[name="Feature.' + key + '"]')[0].checked = val;
});

Пример: http://jsfiddle.net/9z928/


Если вы также хотите заполнить текстовое поле:

var inputs = $('form input');

inputs.first().val( settings.Name );

$.each(settings.Feature, function(key, val) {
    inputs.filter('[name="Feature.' + key + '"]')[0].checked = val;
});

Пример: http://jsfiddle.net/9z928/1/

0 голосов
/ 10 октября 2011

Вы можете использовать эту библиотеку JavaScript для отображения Obeject для формирования имени поля и наоборот. Объект-Form-Mapping

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