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 相关文章推荐
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
Jquery动态替换div内容及动态展示的方法
Jan 23 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
Mar 27 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
layer实现弹窗提交信息
Dec 12 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
微信小程序开发经验总结(推荐)
Jan 11 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
详解Angular5 服务端渲染实战
Jan 04 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
vue点击按钮实现简单页面的切换
Sep 08 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
1 Tube Radio
2021/03/02 无线电
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
简单的js表单验证函数
2013/10/28 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
对python模块中多个类的用法详解
2019/01/10 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
python PIL模块的基本使用
2020/09/29 Python
求职者怎样写自荐信
2014/04/13 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
Python 中的 copy()和deepcopy()
2021/11/07 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏