输入值后,用jQuery获取表单的JSON字符串,key和value分别对应每个输入的name和相应的value,例如:{“name”:“Michael”,“email”:…}
<form id="test-form" action="#0" onsubmit="return false;">
<p><label>Name: <input name="name"></label></p>
<p><label>Email: <input name="email"></label></p>
<p><label>Password: <input name="password" type="password"></label></p>
<p>Gender: <label><input name="gender" type="radio" value="m" checked> Male</label> <label><input name="gender" type="radio" value="f"> Female</label></p>
<p><label>City: <select name="city">
<option value="BJ" selected>Beijing</option>
<option value="SH">Shanghai</option>
<option value="CD">Chengdu</option>
<option value="XM">Xiamen</option>
</select></label></p>
<p><button type="submit">Submit</button></p>
</form>
解决代码1:
<script type="text/javascript">
json = {};//建立空数组
json.name = $('input[name=name]')[0].value;//获取到Name一栏的value
json.email = $('input[name=email]')[0].value;//获取到Email一栏的value
json.password = $('input[name=password]')[0].value;//获取到Password一栏的value
json.gender = $('input[name=gender]').filter(function () {//获取到Gender一栏的value
return this.checked;//获取被选择的值
})[0].value === 'm' ? 'Male' : 'Female';//对被选择的值进行区分
json.city = $('select[name=city] option').filter(function () {//获取到City一栏
return this.selected;//获取被选择的值
})[0].innerText;//选择其中的值(非value)
json = JSON.stringify(json, null, ' ');//json的序列化
alert(json);
</script>
解决代码2:
<script>
var json={};//建立空数组
$('#test-form :input').not('button').filter(function(){//选择表单id="test-form"下非提交按钮的所有节点
return this.type!=='radio'||this.checked;//首先选择所有输入节点,其次在选择非输入节点,由于两者性质不同,选择一方则会忽略另一方
}).map(function(){
return json[this.name]=this.value;//map函数,对节点下标name的赋值value
}).get();//数组字符串化
json=JSON.stringify(json,null, ' ');//json序列化
alert(json);
</script>