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 相关文章推荐
JS 文件大小判断的实现代码
Apr 07 Javascript
jQuery UI的Dialog无法提交问题的解决方法
Jan 11 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
artDialog+plupload实现多文件上传
Jul 19 Javascript
Three.js实现浏览器变动时进行自适应的方法
Sep 26 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
Aug 24 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
javascript 设计模式之享元模式原理与应用详解
Apr 08 Javascript
nuxt 实现在其它js文件中使用store的方式
Nov 05 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
深入PHP内存相关的功能特性详解
2013/06/08 PHP
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
js实现交通灯效果
2017/01/13 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
python利用微信公众号实现报警功能
2018/06/10 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Python计算IV值的示例讲解
2020/02/28 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
利用python实现汉诺塔游戏
2021/03/01 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
一些.net面试题
2014/10/06 面试题
毕业生实习鉴定
2013/12/11 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
企业承诺书怎么写
2014/05/24 职场文书
学校创先争优活动总结
2014/08/28 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL