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


Posted in Javascript onNovember 25, 2015

本文实例讲述了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 相关文章推荐
JavaScript 异步调用框架 (Part 2 - 用例设计)
Aug 03 Javascript
JqGrid web打印实现代码
May 31 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
jQuery焦点图切换简易插件制作过程全纪录
Aug 27 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
Javascript实现运算符重载详解
Apr 07 Javascript
vue 根据数组中某一项的值进行排序的方法
Aug 30 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
Sep 03 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
详解关于Vuex的action传入多个参数的问题
Feb 22 Javascript
一百行JS代码实现一个校验工具
Apr 30 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 #Javascript
js获取图片宽高的方法
Nov 25 #Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 #Javascript
javascript常用经典算法实例详解
Nov 25 #Javascript
javascript实现很浪漫的气泡冒出特效
Sep 05 #Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 #Javascript
JavaScript编写简单的计算器
Nov 25 #Javascript
You might like
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
PHP实现的简单缓存类
2015/07/29 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
JS实现吸顶特效
2020/01/08 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
宣传口号大全
2014/06/16 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
技能培训通讯稿
2015/07/18 职场文书
各种货币符号快捷输入
2022/02/17 杂记