当前位置: 首页 > 编程笔记 >

javascript巧用eval函数组装表单输入项为json对象的方法

齐凯康
2023-03-14
本文向大家介绍javascript巧用eval函数组装表单输入项为json对象的方法,包括了javascript巧用eval函数组装表单输入项为json对象的方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了javascript巧用eval函数组装表单输入项为json对象的方法。分享给大家供大家参考,具体如下:

在ajax方式做web开发时,经常会遇到会保存前,收集表单输入项,组成json对象,然后把对象直接post到服务端的场景

常规做法是在js里写类似如下的代码:

var myObj = {}; 
myObj.x = document.getElementById("x").value; 
myObj.y = document.getElementById("y").value;
//... 
//然后ajax post或get提交

表单元素不多的时候,这样还好,但是如果一个表单有好几十项甚至更多输入项的时候,写这种代码就太费劲了。

好在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数组、json对象、eval()函数用法实例分析,包括了JavaScript数组、json对象、eval()函数用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数组、json对象、eval()函数用法。分享给大家供大家参考,具体如下: 一、JavaScript中的数组 数组使用[]、new Array()或new Array

  • 本文向大家介绍将JavaScript的jQuery库中表单转化为JSON对象的方法,包括了将JavaScript的jQuery库中表单转化为JSON对象的方法的使用技巧和注意事项,需要的朋友参考一下 大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。   我在网上看到有人用替换的方法,先用se

  • 问题内容: 我有这样的表格 我想要的$ _POST输出是一个像 我知道我可以做类似name =“ levels [1] [build_time]”之类的事情,但是由于这些元素是动态添加的,因此很难添加索引。还有其他办法吗? 编辑: 按照建议,我更改了表格。我现在也包含了我的整个HTML,因为我认为这里缺少一些内容。我的HTML现在: 我现在得到的输出是: 编辑2: 根据您的编辑建议,我编辑了表单并

  • 问题内容: 我正在尝试从url获取JSON数据。它是以对象的形式,我必须将对象数据推送到数组中。 我如上所述在my_json var中尝试过,我以对象形式存在json数据,现在我必须将该对象存储为var数据作为以下格式的数组 谁能帮我怎么做?谢谢 问题答案: 观察 如果只有一个对象,而您想将整个对象压入一个数组,则无需迭代该对象。 试试这个 : 代替 :

  • 我可以让这段代码在没有对象作为抽象方法输入参数的情况下工作。例如,如果我亲自将方法的输入参数设置为,emp就会起作用。 当我将输入参数作为方法的对象时,它抛出了一个错误 emp不是抽象的,并且不会覆盖person类emp extends person{^

  • 本文向大家介绍javascript用函数实现对象的方法,包括了javascript用函数实现对象的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript用函数实现对象的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。