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表单验证使用示例(javascript验证邮箱)
Jan 07 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
Aug 12 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
JavaScript如何一次性展示几万条数据
Mar 30 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
JS验证输入的是否是数字及保留几位小数问题
May 09 Javascript
vue组件实现进度条效果
Jun 06 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
Sep 02 Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
vue中用 async/await 来处理异步操作
Jul 18 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
Nov 02 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使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
python实现内存监控系统
2021/03/07 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python实现多属性排序的方法
2018/12/05 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
Python实现12306火车票抢票系统
2019/07/04 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
三下乡活动方案
2014/01/31 职场文书
科技之星事迹材料
2014/06/02 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
python获取字符串中的email
2022/03/31 Python
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL