问题:
今天碰到一个列表形式的表单校验需求,首先想到用jquery的each循环,然后校验结束,发现return false并没有阻止表单提交,因为return false 只结束了each循环。
解决:
定义一个小小的flag
submitForm = function() {
var flag=true;
//1.优惠金额正整数验证
$("input[name$='discount_money']").each(function (i){
var value=$(this).val();
if (value.length>0){
if (!(/(^[1-9]\d*$)/.test(value))) {
flag=false;
$.messager.popup("请输入正整数优惠金额!");
return false;
}
}
});
//2.微信支付折扣率0~1验证
$("input[name$='discount']").each(function (i){
var value=this.value;
if (value.length>0){
if(value<=0 || value>=1){
flag=false;
$.messager.popup("请输入0~1之间的折扣率!");
return false;
}
}
});
// 3.积分比率正整数验证
$("input[name$='discount_point']").each(function (i){
var value=this.value;
if (value.length>0){
if (!(/(^[1-9]\d*$)/.test(value))) {
flag=false;
$.messager.popup("请输入正整数积分抵扣!");
return false;
}
}
});
// 4.提交表单
if(flag){
$.ajax({
url:"save.json",
type:"post",
data:$form.serialize(),
success:function(data){
if (data.code==200){
$.messager.popup("操作成功!");
window.location.reload()
}else{
$.messager.popup(data.msg);
}
},
error:function(e){
$.messager.popup("操作失败!");
}
});
}
总结:
jquery有很多高级的用法,通配符,正则表达式都是值得研究的目标。
附:
each方法教程 http://www.w3school.com.cn/jquery/traversing_each.asp