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使用查询手册
Mar 07 Javascript
javascript获取本机操作系统类型的方法
Aug 13 Javascript
浅析2种JavaScript继承方式
Dec 04 Javascript
jQuery使用$.ajax提交表单完整实例
Dec 11 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
javascript输出AscII码扩展集中的字符方法
Dec 26 Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
vue兄弟组件传递数据的实例
Sep 06 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 Javascript
原生js实现九宫格拖拽换位
Jan 26 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
python输入中文的实例方法
2020/09/14 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
护士自荐信怎么写
2013/10/18 职场文书
晚归检讨书
2014/02/19 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
写给父母的感谢信
2015/01/22 职场文书
2015年征兵工作总结
2015/07/23 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
信息技术研修心得体会
2016/01/08 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB