时间:2021-07-01 10:21:17 帮助过:27人阅读
<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选择符的使用不同,其实质还是一样的。