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之选择组件的深入解析
Jun 19 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
Javascript中的 “&amp;” 和 “|” 详解
Feb 02 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
vuejs使用递归组件实现树形目录的方法
Sep 30 Javascript
windows下更新npm和node的方法
Nov 30 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
Aug 10 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 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 中的批处理的实现
2007/06/14 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
纯javascript版日历控件
2016/11/24 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
Django框架中方法的访问和查找
2015/07/15 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
儿童编程python入门
2018/05/08 Python
python打造爬虫代理池过程解析
2019/08/15 Python
wxPython实现列表增删改查功能
2019/11/19 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
python判断变量是否为列表的方法
2020/09/17 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
工作失误检讨书范文大全
2014/01/13 职场文书
施工质量承诺书范文
2014/05/30 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
2014公司年终工作总结
2014/12/19 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
基于Python实现一个春节倒计时脚本
2022/01/22 Python