• Dwz/Jquery--使用Ajax提交表单时调用表单设置的校验


    案例


    今天有一个需求就是点击按钮时,使用ajax方式提交表单,而且不是直接用form表单下的submit按钮提交,表单中用的校验是dwz 自带的校验方式,表单模板如下:

     <li><div class="data_detail">
                                            <span class="data_name">办公电话:</span>
                                            <div class="data_info">
                                                <input type="text" htitle="办公电话" class="required digits"
                                                    maxlength="12" name="creditcardCustomerJob.tel"
                                                    value="${creditcardCustomerJob.tel}" />
                                            </div>
                                        </div></li>

    ajax调用方式如下:

     //提交表单
                $.ajax({
                    type: $form .method || 'POST',
                    url:$form.attr("action"),
                    data:$form.serializeArray(),
                    dataType:"json",
                    cache: false,
                    success: function(data, textStatus) {
                    	result.msg = data.message;
                        result.flag = true;
                        return result;
                    },
                    error:  function(data,
                            textStatus, errorThrown) {
                    	 result.msg = data.message;
                         result.flag = false;
                         return result;
                    }
                });
                

    发现使用ajax提交方式,并不会调用表单中的校验(class="required digits"),而是直接提交了

    解决方案


    使用Jquery 插件中的valid方法,在js中使用$fom.valid()方式就可以在ajax方式调用form表单中配置的校验方法了

    Jquery 插件中的valid插件

    // http://docs.jquery.com/Plugins/Validation/valid
    	valid: function() {
            if ( $(this[0]).is('form')) {
                return this.validate().form();
            } else {
                var valid = true;
                var validator = $(this[0].form).validate();
                this.each(function() {
    				valid &= validator.element(this);
                });
                return valid;
            }
        }





    例子:
    function submitPersonalInfo(type) {
            var result = new Object();
                var $form = _$("#personal_info_form");
                if (!$form.valid()) {
                     result.flag = false;
                     return result;
                }
                //提交表单
                $.ajax({
                    type: $form .method || 'POST',
                    url:$form.attr("action"),
                    data:$form.serializeArray(),
                    dataType:"json",
                    cache: false,
                    success: function(data, textStatus) {
                    	result.msg = data.message;
                        result.flag = true;
                        return result;
                    },
                    error:  function(data,
                            textStatus, errorThrown) {
                    	 result.msg = data.message;
                         result.flag = false;
                         return result;
                    }
                });
                
                return result;
        }


    Jquery validate插件源码


    $.extend($.fn, {
    	// http://docs.jquery.com/Plugins/Validation/validate
    	validate: function( options ) {
    
    		// if nothing is selected, return nothing; can't chain anyway
    		if (!this.length) {
    			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
    			return;
    		}
    
    		// check if a validator for this form was already created
    		var validator = $.data(this[0], 'validator');
    		if ( validator ) {
    			return validator;
    		}
    		
    		validator = new $.validator( options, this[0] );
    		$.data(this[0], 'validator', validator); 
    		
    		return validator;
    	},
    	// http://docs.jquery.com/Plugins/Validation/valid
    	valid: function() {
            if ( $(this[0]).is('form')) {
                return this.validate().form();
            } else {
                var valid = true;
                var validator = $(this[0].form).validate();
                this.each(function() {
    				valid &= validator.element(this);
                });
                return valid;
            }
        },
    	// attributes: space seperated list of attributes to retrieve and remove
    	removeAttrs: function(attributes) {
    		var result = {},
    			$element = this;
    		$.each(attributes.split(/s/), function(index, value) {
    			result[value] = $element.attr(value);
    			$element.removeAttr(value);
    		});
    		return result;
    	},
    	// http://docs.jquery.com/Plugins/Validation/rules
    	rules: function(command, argument) {
    		var element = this[0];
    		
    		if (command) {
    			var settings = $.data(element.form, 'validator').settings;
    			var staticRules = settings.rules;
    			var existingRules = $.validator.staticRules(element);
    			switch(command) {
    			case "add":
    				$.extend(existingRules, $.validator.normalizeRule(argument));
    				staticRules[element.name] = existingRules;
    				if (argument.messages)
    					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
    				break;
    			case "remove":
    				if (!argument) {
    					delete staticRules[element.name];
    					return existingRules;
    				}
    				var filtered = {};
    				$.each(argument.split(/s/), function(index, method) {
    					filtered[method] = existingRules[method];
    					delete existingRules[method];
    				});
    				return filtered;
    			}
    		}
    		
    		var data = $.validator.normalizeRules(
    		$.extend(
    			{},
    			$.validator.metadataRules(element),
    			$.validator.classRules(element),
    			$.validator.attributeRules(element),
    			$.validator.staticRules(element)
    		), element);
    		
    		// make sure required is at front
    		if (data.required) {
    			var param = data.required;
    			delete data.required;
    			data = $.extend({required: param}, data);
    		}
    		
    		return data;
    	}
    });


  • 相关阅读:
    PPT图片
    饥荒Steam相关mod代码
    Ubuntu20.04更换阿里源 source.list文件
    中断处理与进程调度的区别与联系
    原语和系统调用的区别
    立下个flag,这个月底之前要发一个深度学习入门系列的文章
    conda安装skimage
    机器学习入门(三)
    zip安装的MySQL绑定my.ini配置文件
    Anaconda配置安装
  • 原文地址:https://www.cnblogs.com/evan-liang/p/9189575.html
Copyright © 2020-2023  润新知