对于input单选按钮取值以及判断:
$(function(){
var fingerprint =${obj.data.fingerprint};
for (var key in fingerprint) {
/* $("input[type=radio][name='"+key+"']").attr("checked",fingerprint[key]); */
if("input[type=radio][name='"+key+"']"){
if(fingerprint[key]=="0"){
$("input[type=radio][name='"+key+"'][value=0]").attr("checked",true);
}else{
$("input[type=radio][name='"+key+"'][value=1]").attr("checked",true);
}
}
if(document.getElementById(key)!=null){
document.getElementById(key).value=fingerprint[key];
}
}
})
第一个问题是如何判断哪个按钮被选中了,做法就是在input按钮中加入value的值,是用0表示.否用1表示,
<input type="radio" name="r21" value="1">是</label><label><input type="radio" name="r21" value="0">否</label>
这样在用form表单取值的时候就可以得到0或者1的值了
然后用到了jquery的选择器
input[type=radio][name='"+key+"'][value=1]
这里是三个条件,input是radio类型,name属性,以及value值
name属性中的是key,是一个动态变量,因为radio按钮有很多,是循环显示的,key的值是input的name值,先得到是那个name的input,然后在判断数据库中的fingerprint[key]值是1还是0,然后判断,赋值,选中。
第二个问题是涉及到用ajax结合其方法serializeArray()的使用,serializeArray()时直接将form表单中的数据序列化成json对象,然后前台用dto接收
第一个错误是先前写的是
$('form').submit(function() {
$.ajax({
url:'${base}/userCompany/saveFingerprint',
type:'post',
data:{"name":$("#form").serializeArray()},
success:function(){
alert("保存成功");
},
error:function(result){
//alert(result.responseText || '请求的操作出错了!');
}
});
这样写是得不到值得,先前传参数的时候是这样的{name:zhang,age:45}这里表示的只是一个input属性,而现在要传递的是整个form表单的数据,这里在把整个json对象写死是错误的,应该直接data:formData
争取的写法是这样的:
$('form').submit(function() {
var formData = $("#form").serializeArray();
$.ajax({
url:'${base}/userCompany/saveFingerprint',
type:'post',
data:formData,
success:function(){
alert("保存成功");
},
error:function(result){
//alert(result.responseText || '请求的操作出错了!');
}
});
return false;
});
第二个错误是在接受这个form表单数据的时候,我按照接受单个参数的思维接受这个form表单中的数据,写
public Object saveFingerprint(@Param("fingerprintDto")") FingerprintDto fingerprintDto)
fingerprintDto前在ajax中data中的名字,这样是不行的,无法直接接受整个json,所以要写成这样
public Object saveFingerprint(@Param(..)") FingerprintDto fingerprintDto)
..表示的是通配符,表示我需要fingerprintDto中的什么数据,他就匹配什么数据,比如我需要name属性的值,就可以变成
@Param("name")") FingerprintDto fingerprintDto.getName
这样就可以获取整个fingerprintDto的值了