zoukankan      html  css  js  c++  java
  • 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;
    	}
    });


  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/evan-liang/p/9189575.html
Copyright © 2011-2022 走看看