=====【之前喜欢 异步方式。感觉写校验时,思路连贯,校验完发请求 很流畅。】
<div id="btn_save_baseInfo" class="btn_save"> <input type="submit" value="保存" class="btn btn-default btn-lg btnCustom" /> <%-- 同步 --%> <%--<input id="submitId" type="button" value="保存" class="btn btn-default btn-lg btnCustom" /> 异步--%> </div>
=====老大却说:异步提交 安全性可能比较低。查了下,只查到 js代码 可以拦截Ajax请求。没查到拦截同步action请求。
了解到:异步还是同步 都是 http请求。只是提交方式不一样。安全性 主要决定于后台系统。
但是:行业习惯 认为异步请求相对安全性更低。那就 用同步方式。【免得像现在这样还得该 成同步】
=====
form:
<form id="newform" class="formbox" action="/promotion/media/create" method="post" enctype="multipart/form-data" οnsubmit="return checkForm();" >
<jsp:include page="/WEB-INF/view/jsp/clickcube/admin/media/form.jsp"/>
</form>
校验:
<script>
//===============》同步提交表单 not ok
function checkForm(){
// 1、媒体名称===ok
$("#mediaNameTip").remove(); // 删除上次提示
var val = $("#mediaName").val();
// alert("val0:"+val);
if(val.trim()==undefined || val.trim()==null || val.trim().length<1){
// alert("val2:"+val);
$("#mediaName").after("<span id='mediaNameTip' style='color: red'>必填</span>");
return false;//阻止提交
}
// 2、incomWay
var incomWayChecked=$("input[type='radio'][name='incomeWay']:checked");//alert("incomWayChecked:"+incomWayChecked);//未选 也不是undefined
var incomWayCheckedVal = incomWayChecked.val();//alert("incomWayCheckedVal:"+incomWayCheckedVal);return
/* 00、change时:一级radio 未选择。=====》【只有二级radio需要在change时判断 这项。一级radio change,incomWay一定不是undefined】
提示一级radio必选。
删除所有可能存在的Tip和InputValue。
取消二级radio的选中。
====》easy。
*/
if(undefined == incomWayCheckedVal){ //style='margin-left: 4px'
removeAll_TipAndValue(); //避免同种情况,多个提示。
$("#incomeWayFont").after("<font color='red' id='incomeWayTip' style='float: left; ' >必填</font>");//必须在remove后
$('input:radio[name="cpcType"]').removeAttr('checked');
return false;
}
/* 01、change时:一级radio 已选择:incomWay=0。
删除所有可能存在二级radio的Tip和InputValue: cpc价格清空====ok
取消二级radio的选中。====ok
====》easy。*/
if("0".indexOf(incomWayCheckedVal) != -1){ //String incomWay等于0
removeAll_TipAndValue_Cpc();
$('input:radio[name="cpcType"]').removeAttr('checked');
//=====》add for submit
if( !validateRate()){
return false;
}else {
// submitform();
return true;
}
}
/*
02、change时:一级radio 已选择:incomWay=1。【最复杂的到了。】
*/
if("1".indexOf(incomWayCheckedVal) != -1){ //String incomWay等于1
var cpcTypeVal = $("input[type='radio'][name='cpcType']:checked").val();
/* 02.00、change时:一级radio 未选择。=====》【只有二级radio需要在change时判断 这项。一级radio change,incomWay一定不是undefined】
提示二级radio必选。
删除所有可能存在的Tip和InputValue。
取消二级radio的选中。
====》easy。
*/
if(undefined == cpcTypeVal){ //style='margin-left: 4px'
removeAll_TipAndValue(); //避免同种情况,多个提示。
$("#cpcWayDD").append("<font color='red' id='cpcTypeTip' >必选一种CPC</font>");//必须在remove后
$('input:radio[name="cpcType"]').removeAttr('checked');
return false;
}
/* 02.1 change时:二级radio选择的是cpcType=0
不需要其他操作。*/
if("0".indexOf(cpcTypeVal) != -1){
//不需要其他操作。
//=====》add for submit
if( !validateClickUnitPrice()){
return false;
}else {
//submitform();
return true;
}
}
/*02.2 change时:二级radio选择的是cpcType=1
删除 cpcType=0的 的Tip和InputValue:clickUnitPriceTip清空。clickUnitPrice清空。*/
if("1".indexOf(cpcTypeVal) != -1){
removeAll_TipAndValue_Cpc();//也就是cpcType=0的 的Tip和InputValue
// submitform();
return true;
}
}
/* ==========【校验结束】
*/
return true;
}
</script>