JavaScript利用eval动态构建表单JSON对象

作者:木棉

时间:2026-10-29

浏览:244

本文介绍在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程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章