本人比较懒,在做web时,当遇到要重复多次同样的事时,就想找一种省时省力的方法。
以前在web提交表单并且需要验证用户输入时,在提取用户输入信息时,都要在js用到document.getElementById(),这样一个两个表单域还行,但有很多时(我就遇到过有十几个的情况)看看都眼花,所以个人就比较反感这种方式,不过还好,我自己瞎琢磨,利用jquery找到了一种方便的方法。
我给需要提交数据每个表单域添加了一个额外的属性,用自己额外定义的属性"_postField"代替原来的name属性,比如<input type="text" _postField="name" /><input type="radio" _postField="sex" />之类,然后用query获取所有存在_postField属性的dom对象,并进行遍历,封装成以_postField的值为key,其内容为value的json键值对,其js的方法如下:
复制代码 代码如下:
<script type="text/javascript>
function getFormField(sel){
var objs = $("*["+sel+"]");
var postData = {};
for(var i=0,len=objs.length;i<len;i++){
var obj = objs[i];
var nodeName = obj.nodeName.toLowerCase();
var field = $(obj).attr(sel);
if(nodeName=="input"){
if(obj.type.trim()=="radio"&&(obj.checked||obj.checked=="checked")){
postData[field] = $(obj).val();
continue;
}
if(obj.type.trim()=="checkbox"&&(obj.checked||obj.checked=="checked")){
var ov = postData[field]||"";
var nv = ov+","+$(obj).val();
postData[field] = nv.replace(/^,+/,"");
continue;
}
if(obj.type.trim()=="text"||obj.type.trim()=="hidden"){
postData[field] = $(obj).val();
continue;
}
continue;
}
if(nodeName=="textarea"){
postData[field] = $(obj).val();
continue;
}
if(nodeName=="select"){
var val = obj.options[obj.selectedIndex].value;
postData[field] = val;
continue;
}
postData[field] = $(obj).html();
}
//返回从表单获取数据的json数据
return postData;
}
</script>
测试代码:
复制代码 代码如下:
<form style="margin-left:200px; margin-top:300px;">
<input type="text" value="" _postField="name" /><br /><br />
<input type="radio" value="男" name="sex" _postField="sex" />男
<input type="radio" value="女" name="sex" _postField="sex" />女
<input type="radio" value="中性" name="sex" _postField="sex" />中性 <br /><br />
<select _postField="job">
<option value="上班">上班</option>
<option value="讨饭">讨饭</option>
<option value="啥都不相干">啥都不相干</option>
</select>
<br /><br />
<input type="button" value=" OK " onclick="test();" />
</form>
<script>
function test(){
var postData = getFormField("_postField");
var sb = [];
for(var o in postData){
sb.push(o+"="+postData[o]);
}
alert(sb.join("\n"));
}
</script>
以上例子的表单域比较少,一些东西体现不出,但当表单域的数量比较多少时,就能体现出其方便性,而且重用性较好;再者,如果用jquery异步提交的话,连手动封装json数据的操作都省了。
也有人可能不愿意给表单域增加类似“_postField”的自定义字段,那就直接用本身就有的name也行,这只是jquery选择符的使用不同,其实质还是一样的。
相关推荐:
jquery.ui.draggable中文文档
Flex 3 布局容器学习笔记 整理
VBScript 实现文字遮罩
jquery 可排列的表实现代码
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
php面向对象全攻略 (三)特殊的引用“$this”的使用
让链接必须按先后顺序点击的JS代码
通用javascript脚本函数库 方便开发
写入cookie的JavaScript代码库 cookieLibrary.js
MySQL下将一个表的数据插入到另外一个表的实现语句
Mootools 1.2教程 Tooltips
ExtJS 配置和表格控件使用第1/2页
FCKEditor网页编辑器 几点使用心得
sqlserver 常用存储过程集锦
php 显示指定路径下的图片
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oracle字符集修改查看方法
ASP 调用dll及封装dll实例
SQLSERVER 中datetime 和 smalldatetime类型分析说明
js获取图片长和宽度的代码
JavaScript 动态创建VML的方法
防止SQLSERVER的事件探查器跟踪软件
sql中all,any,some用法
Mootools 1.2教程 输入过滤第一部分(数字)
让iframe子窗体取父窗体地址栏参数(querystring)
PHP 单引号与双引号的区别
jQuery get和post 方法传值注意事项
php 网页游戏开发入门教程一(webgame+design)
预防黑客侵入你正在使用的Win系统(隐藏帐号)
jQuery 行级解析读取XML文件(附源码)
ExtJS Grid使用SimpleStore、多选框的方法
jquery控制listbox中项的移动并排序
JS 倒计时实现代码(时、分,秒)
在ACCESS和SQL Server下Like 日期类型查询区别
jQuery 事件队列调整方法
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
vbs 函数 获取数组字符串的最后一个LastOne 挺方便的
禁止在图片上使用右键
javascript线性渐变一
ASP实现防止网站被采集代码
javascript 面向对象,实现namespace,class,继承,重载
Win2008 蓝屏漏洞揭秘
jQuery live( type, fn ) 委派事件实现
prototype 中文参数乱码解决方案
php实现网站插件机制的方法
初学js者对javascript面向对象的认识分析
让Firefox支持event对象实现代码
jQuery 使用手册(六)
网站控制台directadmin中文手册 Linux下虚拟主机管理
学习ExtJS border布局