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实现的模拟QQ邮箱里的收件人选取及其他效果(一)
Jan 06 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
Aug 14 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 Javascript
完美解决IE9浏览器出现的对象未定义问题
Sep 29 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
判断div滑动到底部的scroll实例代码
Nov 15 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 Javascript
vue3.0 加载json的方法(非ajax)
Oct 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处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
PHP7变量处理机制修改
2021/03/09 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
js module大战
2019/04/19 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python解析json实例方法
2013/11/19 Python
python实用代码片段收集贴
2015/06/03 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
竞聘演讲稿
2014/04/24 职场文书
小学班级口号
2014/06/09 职场文书
初中家长评语大全
2014/12/26 职场文书
听证通知书
2015/04/24 职场文书
倡议书的格式写法
2015/04/28 职场文书
会议室使用管理制度
2015/08/06 职场文书
工作一年自我鉴定
2019/06/20 职场文书