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 相关文章推荐
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
jquery.post用法之type设置问题
Feb 24 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
js倒计时小实例(多次定时)
Dec 08 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
javascript的delete运算符知识点总结
Nov 19 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
如何用JS实现简单的数据监听
May 06 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
什么是短波收听SWL
2021/03/01 无线电
上传多个文件的PHP脚本
2006/11/26 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
详解参数传递四种形式
2015/07/21 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
Django开发中复选框用法示例
2018/03/20 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
北京振戎融通Java面试题
2015/09/03 面试题
优秀员工自荐信范文
2013/10/05 职场文书
给排水专业应届生求职信
2013/10/12 职场文书
竟聘演讲稿范文
2013/12/31 职场文书
捐书活动总结
2014/05/04 职场文书
法律专业求职信
2014/05/24 职场文书
家庭教育的心得体会
2014/09/01 职场文书
车贷收入证明范本
2014/09/14 职场文书
婚育证明格式
2015/06/17 职场文书
《社戏》教学反思
2016/02/22 职场文书
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS