解决未对 form 表单数据进行校验直接就可以提交的问题
今天遇到了一个问题,完成登录和注册功能时,使用 easyui 的 required:true,validType:'length[6,18]' 等等各种校验 textbox 时,点击登录或者注册按钮,未输入任何值也能提交,然后后台报错。后来发现自己使用的按钮类型为 submit,而且 easyui 并不主动提供校验 form 表单所有数据之后再提交的方法,但是有校验所有数据是否符合要求的方法。
解决这个问题首先要清楚,submit 类型的按钮点击后直接就提交 form 表单了,但是 button 类型的按钮不会。所以解决思路是:可以先把 submit 改成 button,然后给这个按钮添加一个点击事件,在这个点击事件中判断所有数据是否都符合自己定义的校验规则,符合的话将 button 改为 submit,否则不改变,就一直无法提交。具体参考代码如下:
例一:
<div style="margin:20px 100px 10px 100px">
<input type="button" class="easyui-linkbutton" id="regButton" value="完成注册"
style="padding:5px 0px;width:100%;font-size:20px;">
</div>
$("#regButton").click(function(){
//registered为表单id。所有数据符合校验要求时,isValid 返回true。
var isValid = $("#registered").form('validate');
if(isValid){
$("#regButton").attr("type","submit");
}
});
例二:
<div id="organizationDlg" class="easyui-dialog" style="width:380px;padding:10px 20px"
closed="true" buttons="#dlg-buttons" modal="true" cache="false" collapsible="false" closable="true">
<form id="organizationFM" method="post" novalidate>
<table>
<tr>
<td>上级机构</td>
<td style="padding:5px">
<input name="orgParentName" id="orgParentName" style="width: 200px;height: 20px" readonly="readonly"/>
<a href="javascript:void(0)" class="l-btn l-btn-plain" group="" id="lookForSelectOrganization">
<span class="l-btn-left"><span class="l-btn-text icon-search l-btn-icon-left"></span></span></a>
<input name="orgParentNo" id="orgParentNo" type="hidden"/>
<input name="selectType" id="selectType" type="hidden"/>
</td>
</tr>
<tr>
<td>全称</td>
<td style="padding:5px">
<input name="orgFullName" id="orgFullName" class="easyui-validatebox"
data-options="required:true,validType:'length[2,30]'" style="width: 200px;height: 20px"/>
<input name="id" id="id" type="hidden"/>
</td>
</tr>
<tr>
<td>简称</td>
<td style="padding:5px">
<input name="orgAbr" id="orgAbr" class="easyui-validatebox"
data-options="required:true,validType:'length[2,20]'" style="width: 200px;height: 20px"/>
</td>
</tr>
<tr>
<td>状态</td>
<td style="padding:5px">
<select name="orgStcd" id="orgStcd" style="width: 200px;height: 20px">
<option value="1">未营业</option>
<option value="2">正常营业</option>
<option value="3">暂停营业</option>
<option value="4">终止营业</option>
</select>
</td>
</tr>
<tr>
<td>编号</td>
<td style="padding:5px">
<input name="orgNo" id="orgNo" class="easyui-validatebox"
data-options="required:true,validType:'length[2,20]'" style="width: 200px;height: 20px"/>
</td>
</tr>
<tr>
<td>序号</td>
<td style="padding:5px">
<input name="sort" id="sort" class="easyui-validatebox"
data-options="required:true,validType:'length[2,20]'" style="width: 200px;height: 20px"/>
</td>
</tr>
<tr>
<td>开创时间</td>
<td style="padding:5px">
<input type="text" name="orgCreateTime" id="orgCreateTime"
onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH🇲🇲ss'})" class="txt Wdate" style="width:200px;"/>
</td>
</tr>
<tr>
<td>停业时间</td>
<td style="padding:5px">
<input type="text" name="orgStopTime" id="orgStopTime"
onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH🇲🇲ss'})" class="txt Wdate" style="width:200px;"/>
</td>
</tr>
<tr>
<td>备注</td>
<td style="padding:5px">
<textarea name="remark" id="remark" placeholder="暂无备注信息"
style="width: 200px; height:40px;"></textarea>
</td>
</tr>
</table>
</form>
</div>
<div id="dlg-buttons">
<a href="javascript:void(0)" id="saveOrganization" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
<a href="javascript:void(0)" id="cancelOrganization" class="easyui-linkbutton" iconCls="icon-cancel"
onclick="javascript:$('#organizationDlg').dialog('close')">取消</a>
</div>
//保存信息
$("#saveOrganization").off("click").on("click", function () {
if (!$("#orgFullName").val()) {
$.messager.alert('提示', '全称不能为空!', 'warning');
return;
}
if (!$("#orgAbr").val()) {
$.messager.alert('提示', '简称不能为空!', 'warning');
return;
}
if (!$("#orgNo").val()) {
$.messager.alert('提示', '编号不能为空!', 'warning');
return;
}
/**
* create by: qiankunpingtai
* create time: 2019/3/21 14:56
* website:https://qkpt.top/mnt/
* description:
* 提交时需要对表格内容进行校验,校验通过后提交后台处理
*/
var isValid = $("#organizationFM").form('validate');
if(!isValid){
return;
}
var objInfo = $("#organizationFM").serializeObject();
$.ajax({
type: "post",
url: url,
dataType: "json",
data: ({
info: JSON.stringify(objInfo)
}),
success: function(res) {
if(res) {
if(res.code!=200){
$.messager.alert('提示', res.msg, 'error');
return;
}
$('#organizationDlg').dialog('close');
//加载完以后重新初始化
$('#tt').tree('reload');
}
},
//此处添加错误处理
error: function () {
$.messager.alert('提示', '保存机构信息异常,请稍后再试!', 'error');
return;
}
});
});