jQuery基于json对象自动给表单元素赋值

jQuery基于json对象自动给表单元素赋值

为了提高前端小伙伴的开发效率,造了个基于json对象根据表单元素的name属性自动赋值的轮子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

json2form:function(obj){
var nodeParent = null;
var value = undefined;
var $el = null;
var nodeName = "";
for(var i in obj){
value= obj[i] ;
if(value === undefined || value===null){
continue;
}
if(typeof value == 'object'){
nodeParent=obj.nodeParent;
value.nodeParent=nodeParent?nodeParent+"."+i : i;
if(value instanceof Array){
for(var mm=0;mm<value.length;mm++){
var ms=value[mm];
if(typeof ms == 'object'){
nodeParent=ms.nodeParent;
ms.nodeParent=ms.nodeParent?ms.nodeParent+"."+i+"["+mm+"]":i+"["+mm+"]";
arguments.callee(ms);
}
}
$el=$("[name='"+i+"']");
if($el.is(":checkbox")){
$el.each(function(){
if($(this).val() == value){
$(this).prop("checked",true);
}
})
}
else if($el.is(":radio")){
$el.each(function(){
if($(this).val() == value){
$(this).prop("checked",true);
}
})
}
}else{ //递归
arguments.callee(value);
}
}
else{
nodeName=obj.nodeParent?obj.nodeParent+"."+i : i ;
$el=$("[name='"+nodeName+"']");
if($el.length > 0){
// console.log("匹配数据名称:"+nodeName+"值:"+value);
if($el.is(":text")||$el.attr("type")=="hidden"){
if($el.data("money") && $el.data("money") == "money"){
value = outputdollars(value);
}
$el.val(value);

}else if($el.is(":radio")){
$el.each(function(){
if($(this).val()==value){
$(this).prop("checked",true);
}
})
}
else if($el.is("select")){
$el.find("option").filter(function(){return $(this).val() == obj[i];}).prop("selected",true);
}else if($el.is("textarea")){
$el.val(value)
}
}
}
}

}

注意: 表单的name属于与json对象的属性名为一致,保持继承链。
例如 input name=’a.b.c’ 表示json对象里面的a属性里面的b属性的c属性。