JavaScript利用eval动态构建表单JSON对象
本文介绍在Ajax开发中,如何利用JavaScript的eval函数动态组装表单输入项为JSON对象。通过规范表单元素的name属性,调用setFormModel函数即可快速获取数据,避免手动编写大量赋值代码,提高开发效率。
引言与背景
本文实例介绍了在JavaScript中巧妙利用eval函数,将表单输入项组装为JSON对象的方法。内容供读者参考和借鉴。
在进行基于Ajax的Web开发时,经常需要在数据保存前收集表单中的各项输入值,将其组合成一个JSON对象,随后直接通过POST方式提交至服务端。
常规手动赋值方法的局限
通常的做法是在JavaScript代码中手动编写如下逻辑:
var myObj = {};
myObj.x = document.getElementById("x").value;
myObj.y = document.getElementById("y").value;
//...
//然后ajax post或get提交
当表单元素数量较少时,这种手动赋值的方式尚可接受;但如果表单包含几十项甚至更多的输入字段,逐一编写此类代码将极其繁琐且耗费精力。
利用eval动态构建对象
幸运的是,JavaScript中提供了一个功能强大的eval函数,它能够协助完成类似C#反射机制的工作,例如实现如下动态对象构建:
eval('A={}');
if (A.b==undefined)
{
A.b = {};
}
eval('A.b.c = 1');
alert(A.b.c);
表单优化与数据收集实现
通过上述方式,我们可以动态创建一个复合对象A。理解这一原理后,可以对表单结构进行适当优化:
运单号:<input type="text" name="AwbPre" value="112" style="width:40px"/>-<input type="text" name="AwbNo" value="12312311"/><br/>
结算方式:
<select name="SettlementMode" style="width:100px">
<option value="CASH" selected="selected">现金</option>
<option value="MONTH">月结</option>
</select>
<br/>
不需要赋值的属性:<input type="input" name="NotMe" value="NotMe ..." isModel="false"/>
<script type="text/javascript">
function setFormModel(modelName){
eval(modelName + "={}");
var inputArr = document.getElementsByTagName("INPUT");
for(var i=0;i<inputArr.length;i++){
var isModel = inputArr[i].getAttribute("isModel");
var itemName = inputArr[i].name;
var itemValue = inputArr[i].value;
if(isModel!="false"){
eval(modelName + "." + itemName + "='" + itemValue + "';");
}
}
var selectArr = document.getElementsByTagName("SELECT");
for(var i=0;i<selectArr.length;i++){
var isModel = selectArr[i].getAttribute("isModel");
var itemName = selectArr[i].name;
var itemValue = selectArr[i].value;
if(isModel!="false"){
eval(modelName + "." + itemName + "='" + itemValue + "';");
}
}
return modelName;
}
setFormModel("AwbModel");
alert("单号:" + AwbModel.AwbPre + "-" + AwbModel.AwbNo + "\n结算方式:" + AwbModel.SettlementMode + "\n不该有的属性:" + AwbModel.NotMe);
</script>
只要确保form元素的name属性设置正确,在需要收集表单数据时,只需调用setFormModel函数,即可快速生成一个JSON对象。需要注意的是,这只是一个示例,目前仅处理了一级属性的情况;若涉及多级属性,读者可根据需要自行扩展,主要涉及字符串拼接处理。
希望本文所述的技巧对JavaScript程序设计有所帮助。
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
