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 相关文章推荐
由prototype_1.3.1进入javascript殿堂-类的初探
Nov 06 Javascript
js下用gb2312编码解码实现方法
Dec 31 Javascript
jQuery插件扩展测试实例
Jun 21 Javascript
Bootstrap轮播图的使用和理解4
Dec 14 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
利用js给datalist或select动态添加option选项的方法
Jan 25 Javascript
jQuery实现的上传图片本地预览效果简单示例
Mar 29 jQuery
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
JavaScript展开操作符(Spread operator)详解
Jul 20 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 Javascript
js+h5 canvas实现图片验证码
Oct 11 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
谈谈PHP语法(5)
2006/10/09 PHP
php5中类的学习
2008/03/28 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
laravel 数据验证规则详解
2019/10/23 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
python字典一键多值实例代码分享
2019/06/14 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
.NET面试10题
2014/02/24 面试题
物流管理应届生求职信
2013/11/07 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书