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新手语法小结
Jun 15 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
Mar 01 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
提升jQuery的性能需要做好七件事
Jan 11 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
微信小程序倒计时功能实现代码
Nov 09 Javascript
JS+Canvas绘制动态时钟效果
Nov 10 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
详解JavaScript中Arguments对象用途
Aug 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
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php cli配置文件问题分析
2015/10/15 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
前端微信支付js代码
2016/07/25 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python中的面向对象编程详解(下)
2015/04/13 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫