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 相关文章推荐
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
使用javascript实现Iframe自适应高度
Dec 24 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
图解Javascript——作用域、作用域链、闭包
Mar 21 Javascript
axios发送post请求springMVC接收不到参数的解决方法
Mar 05 Javascript
基于JavaScript实现幸运抽奖页面
Jul 05 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 Javascript
layui table 表格模板按钮的实例代码
Sep 21 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 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中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
js 分栏效果实现代码
2009/08/29 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
js单线程的本质 Event Loop解析
2019/10/29 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
Python输出带颜色的字符串实例
2017/10/10 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
python 图像平移和旋转的实例
2019/01/10 Python
django用户登录验证的完整示例代码
2019/07/21 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
公司前台接待岗位职责
2013/12/03 职场文书
农民入党思想汇报
2014/01/03 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
Python自动化爬取天眼查数据的实现
2021/06/15 Python
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS