这个练习是我在学习Jquery时,遇到的一个很经典的例子,在这里记录下来,以免以后忘记。
例子出自廖雪峰老师写的javascript教程:查找和过滤-廖雪峰的官方网站
廖老师的这个教程写的很详细很超前,有需要的推荐去学习一下。
以下是该例的题目及我的答案:
练习
对于下面的表单:
<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>
在以下表单中输入值后,用jQuery获取表单的JSON字符串,key和value分别对应每个输入的name和相应的value,例如:{"name":"Michael","email":...}
我的JS代码:
<script>
'use strict';
var json = null;
var obj = {}; //声明一个空对象
var input = $('#test-form input'); //获取所有的input节点
var select = $('select'); //获取select节点
input.map(function(){ //用map()方法将每个input的属性、属性值添加到obj中
if(this.type === 'radio'){
if(this.checked){ //只将选中的radio节点添加进obj中
obj[this.name] = this.value;
}
}else{
obj[this.name] = this.value;
}
});
select.find('option').map(function(){ //原理同上
if(this.selected){
obj[select.name] = this.value;
}
});
json = JSON.stringify(obj); //将obj转为JSON的string格式
// 显示结果:
if (typeof(json) === 'string') {
alert(json);
}
else {
alert('json变量不是string!');
}
</script>