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 Math.random()随机数函数
Nov 04 Javascript
javascript时区函数介绍
Sep 14 Javascript
JS 跳转页面延迟2种方法
Mar 29 Javascript
js Math 对象的方法
Sep 01 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
May 09 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
Jun 22 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
使用JavaScript实现alert的实例代码
Jul 06 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 Javascript
vue实现简单跑马灯效果
May 25 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记录日志的实现代码
2011/08/08 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
js计算精度问题小结
2013/04/22 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
轮播的简单实现方法
2016/07/28 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
Python的Django框架中的数据过滤功能
2015/07/17 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python帮你识破双11的套路
2019/11/11 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Pycharm Git 设置方法
2020/09/15 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
学期评语大全
2014/04/30 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS