使用jQuery从关联数组填充表单

时间:2008-10-05 19:44:51

标签: javascript jquery

上次I asked about the reverse process,得到了一些非常有效的答案。我的目标是最少的代码行。我有{fieldname:data}格式的字段和关联数组,我想用它填充相应的表单。

4 个答案:

答案 0 :(得分:10)

如果表单元素的ID设置为fieldname:

$.each(myAssocArry, function(i,val) { $('#'+i).val(val); });

答案 1 :(得分:7)

当我为一个项目做这个时,我发现设置选择字段,单选按钮和复选框的值需要更复杂的代码,这有点像:


jQuery.each(data, function (name,value) {
  jQuery("input[name='"+name+"'],select[name='"+name+"']").each(function() {
    switch (this.nodeName.toLowerCase()) {
        case "input":
            switch (this.type) {
                case "radio":
                case "checkbox":
                    if (this.value==value) { jQuery(this).click(); }
                    break;
                default:
                    jQuery(this).val(value);
                    break;
            }
            break;
        case "select":
            jQuery("option",this).each(function(){
                if (this.value==value) { this.selected=true; }
            });
            break;
    }
  });
});

我没有测试过这段代码,所以我希望没有愚蠢的语法错误,我应该抓住它。希望这会有所帮助。

我不允许在这里评论评论,所以.... 如注释中所述,jQuery .val(val)方法处理设置单选按钮,复选框和选择。

您仍然需要将select [name = ...]放入jQuery选择器模式中,否则select元素将不会更新。

答案 2 :(得分:5)

或者类似于之前使用字段名称而不是ids的建议:

$.each(data, function(name,value) {
    $("input[name='" + name + "']").val(value);
});

答案 3 :(得分:1)

我还没有看到jQuery句柄将单个(非数组)值传递给val()以用于收音机或复选框输入。您必须确保将单个值包装到数组中。

我通常也不想改变button-ish输入的值,所以我将它们过滤掉了。

这是一个处理数组包装,按钮过滤的函数,并且还将输入选择限制为给定的表单元素。表单参数是可选的。如果不使用/ null / undefined,则会选择页面上的所有输入。

function populateForm(data, form) {
    $.each( data, function(name, value) {
        var input = $(":input[name='" + name + "']:not(:button,:reset,:submit,:image)", form );
        input.val( ( !$.isArray( value ) && ( input.is(':checkbox') || input.is(':radio') ) ) ? [ value ] : value );
    } );
};