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 多种搜索引擎集成的页面实现代码
Jan 02 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
AngularJS中的过滤器filter用法完全解析
Apr 22 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
May 05 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
Jun 25 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
Jul 04 Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 Javascript
vue实现图片上传预览功能
Dec 23 Javascript
Json实现传值到后台代码实例
Jun 30 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输入数据统一类实例
2015/02/23 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python3实现转换Image图片格式
2018/06/21 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
趣味游戏活动方案
2014/02/07 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
检讨书范文大全
2015/05/07 职场文书
催款律师函范文
2015/05/27 职场文书
郭明义观后感
2015/06/08 职场文书
党小组意见范文
2015/06/08 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript