jQuery.validate 表单动态验证
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可以选择使用jQuery.validate提供的动态校验方法。 图1.1 需要校验的HTML页面 js文件内容如下: var oTab = document.getElementById( 'addAppDetailTab' ); //获取表格的行数 var id = oTab != null ? oTab.tBodies[0].rows.length : 0; $( function () { //点击添加,为表格追加一行 $( '#addAppDetailBtn' ).click( function () { var oTr = document.createElement( 'tr' ); var oTd = document.createElement( 'td' ); oTd.appendChild(oTr); oTab.appendChild(oTr); createTD(oTab); }); }); //为表格追加一行的方法 function createTD(oTab) { //var id = $('#addAppDetailTab').attr('tabTrIndex'); //id = id ? id : 1; $( '#addAppDetailTab' ).attr( 'tabTrIndex' , id); var oTr = document.createElement( 'tr' ); var oTd = document.createElement( 'td' ); oTd.innerHTML = '<div class="td validation-box"><input class="form-control" style="width:70px" value="" id="appDetailVOList[' + id + '].version" name="appDetailVOList[' + id + '].version"></div>' ; oTr.appendChild(oTd); var oTd = document.createElement( 'td' ); oTd.innerHTML = '<div class="td validation-box"><input class="form-control" style="width:120px" οnclick="WdatePicker({skin:\'mag\',dateFmt:\'yyyy-MM-dd HH:mm:ss\'})" value="" id="appDetailVOList[' + id + '].updateTime" name="appDetailVOList[' + id + '].updateTime"></div>' ; oTr.appendChild(oTd); var oTd = document.createElement( 'td' ); oTd.innerHTML = '<div class="td validation-box"><input class="form-control wdate" style="width:50px" value="" name="appDetailVOList[' + id + '].appSize"><span>MB</span></div>' ; oTr.appendChild(oTd); var oTd = document.createElement( 'td' ); //添加beetl表达式 var copy = $( '#platformListDiv' ).clone(); copy.find( ".select-text" ).attr( "id" , "appDetailVOList[" + id + "].platform" ); copy.find( ".select-text" ).attr( "name" , "appDetailVOList[" + id + "].platform" ); copy.appendTo(oTd); oTr.appendChild(oTd); var oTd = document.createElement( 'td' ); oTd.innerHTML = '<div class="td validation-box"><input class="form-control" style="width:200px" value="" name="appDetailVOList[' + id + '].url"></div>' ; oTr.appendChild(oTd); var oTd = document.createElement( 'td' ); oTd.innerHTML = '<div class="td"><a href="javascript:;" id="deleteAppVersion_' + id + '" name="deleteAppVersion_' + id + '">删除</a></div>' ; oTr.appendChild(oTd); oTd.getElementsByTagName( 'a' )[0].onclick = function () { var appNum = oTab != null ? oTab.tBodies[0].rows.length : 0; var id = $( this ).attr( 'id' ); var trIndex = id.substring(id.indexOf( '_' ) + 1, id.length); $( '#addAppDetailTab' ).attr( 'tabTrIndex' , trIndex); if (appNum >= 2) { oTab.tBodies[0].removeChild( this .parentNode.parentNode.parentNode); } else { $( this ).parent().addClass( 'validation-box' ); $( this ).after(getValidShowErrorHtml( "必须填写一行APP版本信息" , $( this ).attr( 'name' ))); } $( '#addAppDetailBtn' ).show(); } oTab.tBodies[0].appendChild(oTr); id ++; } //保存表单信息的方法 function save() { doAppValidate( 'app_submit_form' ); var flag = $( "#app_submit_form" ).valid(); if (!flag){ return ; } var dataArray = formArrayUtil($( "#app_submit_form" ).serializeArray())[0]; console.log(dataArray); } /** * 校验 * @param formid */ /** * desc:特殊字符验证 */ jQuery.validator.addMethod( "specialCharValidate" , function (value, element, param) { var pattern = new RegExp( "[`~!@%#$^&*()=|{}':;', \\[\\]<>/? \\.;:%……+¥()【】‘”“'。,、?]" ); return this .optional(element)||!pattern.test(value) ; }, "请不要输入特殊字符" ); jQuery.validator.addMethod( "positiveNumValidate" , function (value, element, param) { var strRegex = "^[0-9]+(.[0-9]{2}|.[0-9])?$" ; var pattern = new RegExp(strRegex); if (value != "" ) { if (!pattern.test(value)) { return false ; } } return true ; }, "请输入正数(小数或整数)" ); var rules4Volidate = { name : { required : true , maxlength : 24 }, icon : { required : true , maxlength : 100 }, desc : { required : true , maxlength : 100 }, author : { required : true , maxlength : 24 }, email : { required : true , email : true }, webUrl : { maxlength : 100, url : true }, reqdata : { required : true }, jcaptchaCode : { required : true } }; var messages4Volidate = { name : { required : "请输入应用名称" , maxlength : "名称长度不能超过24个字符" }, icon : { required : "请选择应用图标" , }, desc : { required : "请输入应用描述" , maxlength : "应用描述不能超过100个字符" }, author : { required : "请填写开发者" }, email: { required : "请填写开发者邮箱" , email : "请输入正确的email地址" }, webUrl : { maxlength : "下载链接不能超过100个字符" , url : "请输入合法的URL" }, reqdata : { required : "请填写所用数据" }, jcaptchaCode : { required : "请填写验证码" } }; //动态改变rules4Volidate(JSON格式) 的值 function getRules(formid) { if ($( "#" + formid).find( "tr" ).length > 0) { // 开始逐行验证 $( "#" + formid).find( "tr" ).each( function (index, tr) { $( this ).find( "input" ).each( function () { var nameValue = $( this ).attr('name'); var idValue = this ; if (nameValue.indexOf( "].version" ) != -1) { rules4Volidate[nameValue] = {required : true , maxlength : 12, positiveNumValidate : true }; messages4Volidate[nameValue] = {required : "请正确填写APP版本" , positiveNumValidate: "请输入正数(小数或整数)" }; } else if (nameValue.indexOf( "].updateTime" ) != -1) { rules4Volidate[nameValue] = {required : true }; messages4Volidate[nameValue] = {required : "请正确填写APP版本" }; } else if (nameValue.indexOf( "].appSize" ) != -1) { rules4Volidate[nameValue] = {required : true , maxlength : 6, positiveNumValidate: true }; messages4Volidate[nameValue] = {required : "请正确填写APP大小" , maxlength : "APP大小长度不能超过6位" , appSizeValidate: "请输入正数(小数或整数)" }; } else if (nameValue.indexOf( "].platform" ) != -1) { rules4Volidate[nameValue] = {required : true }; messages4Volidate[nameValue] = {required : "请正确填写APP运行平台" }; } else if (nameValue.indexOf( "].url" ) != -1) { rules4Volidate[nameValue] = {required : true , maxlength : 100, url : true }; messages4Volidate[nameValue] = {required : "请正确填写APP下载地址" , maxlength : "APP下载地址长度不能超过6位" , url : "请输入合法的URL地址" }; } }); } ); } } function doAppValidate(formid){ //获取当前rules4Volidate 的值 getRules(formid); /*删除jQuery.volidate上一次表单验证添加的validator数据,不删除的话第二次校验不生效。原因如下图代码*/ $("#" + formid).removeData("validator");//这个是动态拼串的方式生效的关键 $( "#" + formid).validate({rules : rules4Volidate, messages: messages4Volidate, errorPlacement : validErrorFunction, success : validSuccessFunction}); } 图1.2 jQuery.validate源码 ———————————————— 版权声明:本文为CSDN博主「aa1bb1cc2」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/aa1bb1cc2/article/details/80724971