jQuery Form Validation验证框架(修改与扩展)二

最近在项目中要用到验证,所以重新看了下jquery的一个验证框架。

0.2版本小小的bug修改。

修改地方:

/** Inline Form Validation Engine 1.7, jQuery plugin
 *
 * Copyright(c) 2010, Cedric Dugas
 * http://www.position-relative.net
 *
 * Form validation engine allowing custom regex rules to be added.
 * Thanks to Francois Duquette and Teddy Limousin
 * and everyone helping me find bugs on the forum
 * Licenced under the MIT Licence
 *
 * bluespring 修改1.6.4.1
 *  1.提供选项定制是否关闭提示框箭头 showArray
 *  2.提供选项定制提示框是否在鼠标放上去的时刻出现还是一直出现 showOnMouseOver
 *  3.提供选项定制input 效验错误样式
 *
 * Quentin 修改
 *  1. 无法全部去掉红色边框的bug
 *
 * matychen 修改
 *  1.把css 中的errorform的padding-bottom改为margin-bottom ,如果不改,在checkbox的时候会遮挡。
 *  2.当showOnMouseOver为true时。增加处理checkbox时,下面被占用,自己减少了top的高度,如果不减少top的高度,在checkbox的时候会遮挡。
 *  3.修复了ie6的select遮挡div的bug
 *  4.增加验证规则存放的属性名称
 *  5.修改了ajax的发送到客户端的参数名称,返回值不用数组,直接用json对象。
 *      验证规则的名称validateError-->customAjaxRule
 */

增加验证规则存放的属性名称

可以不用定义规则在class里面,自己写个属性也可以:$("#formID").validationEngine({validateAttribute: "validate"});

input里面:<input value="" validate="validate[required,custom[noSpecialCaracters],length[0,20],ajax[ajaxUser]]" type="text" name="user" id="user" />

修改了ajax的提交参数,和返回参数

if (!ajaxisError) {
                    $.ajax({
                        type: "POST",
                        url: postfile,
                        //async: true,//要验证的值                       验证值的名称              验证规则的名称validateError-->customAjaxRule
                        data: "validateValue=" + fieldValue + "&validateId=" + fieldId + "&customAjaxRule=" + customAjaxRule + "&extraData=" + extraData,
                        beforeSend: function () { // BUILD A LOADING PROMPT IF LOAD TEXT EXIST
                            if ($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad) {
                                if (!$("div." + fieldId + "formError")[0]) {
                                    return $.validationEngine.buildPrompt(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load");
                                } else {
                                    $.validationEngine.updatePromptText(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load");
                                }
                            }
                        }, error: function (data, transport) {
                            $.validationEngine.debug("Ajax 错误: " + data.status + " " + transport);
                        }, success: function (data) { // GET SUCCESS DATA RETURN JSON
                            //  jquery 已经转为json了,所以不要这句话,不然会报:missing ] after element list的错误
                            //  data = eval("(" + data + ")"); // GET JSON DATA FROM PHP AND PARSE IT
                            // add by matychen 不用数组,直接用json对象。例如:{"validateId":"user","ajaxisError":false,"customAjaxRule":"ajaxUser"}
                            ajaxisError = data.ajaxisError; //true or false
                            customAjaxRule = data.customAjaxRule; //验证规则的名称
                            ajaxCaller = $("#" + data.validateId)[0]; //验证值的id
                            //
                            fieldId = ajaxCaller;
                            ajaxErrorLength = $.validationEngine.ajaxValidArray.length;
                            existInarray = false;
                            //对象就不能是"false"了
                            if (ajaxisError == false) { // DATA FALSE UPDATE PROMPT WITH ERROR;
                                _checkInArray(false); // Check if ajax validation alreay used on this field
                                if (!existInarray) { // Add ajax error to stop submit
                                    $.validationEngine.ajaxValidArray[ajaxErrorLength] = new Array(2);
                                    $.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId;
                                    $.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false;
                                    existInarray = false;
                                }
                                $.validationEngine.ajaxValid = false;
                                promptText += $.validationEngine.settings.allrules[customAjaxRule].alertText + "<br />";
                                $.validationEngine.updatePromptText(ajaxCaller, promptText, "", true);
                            } else {
                                _checkInArray(true);
                                $.validationEngine.ajaxValid = true;
                                if (!customAjaxRule) {
                                    $.validationEngine.debug("customAjaxRule没有返回值, 请检查. ");
                                }
                                if ($.validationEngine.settings.allrules[customAjaxRule].alertTextOk) { // NO OK TEXT MEAN CLOSE PROMPT
                                    $.validationEngine.updatePromptText(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextOk, "pass", true);
                                } else {
                                    ajaxValidate = false;
                                    $.validationEngine.closePrompt(ajaxCaller);
                                }
                            }

                            function _checkInArray(validate) {
                                for (x = 0; x < ajaxErrorLength; x++) {
                                    if ($.validationEngine.ajaxValidArray[x][0] == fieldId) {
                                        $.validationEngine.ajaxValidArray[x][1] = validate;
                                        existInarray = true;
                                    }
                                }
                            }
                        }
                    });
                }

在服务端的代码只要这样就可以了:

/**
     * Ajax验证用户名
     *
     * @param customAjaxRule
     *            验证规则名称
     * @param validateId
     *            验证值的ID
     * @param validateValue
     *            验证值
     * @return
     */
    @RequestMapping(value = "/validateAjaxUser")
    @ResponseBody
    public Map<String, Object> validateAjaxUser(
            @RequestParam("customAjaxRule") String customAjaxRule,
            @RequestParam("validateId") String validateId,
            @RequestParam("validateValue") String validateValue) {
        logger.info("validateAjaxUser");
        Map<String, Object> map = new HashMap<String, Object>();
        // 验证用户名是否等于javaeye
        if ("javaeye".equals(validateValue)) {
            // 是否通过
            map.put("ajaxisError", true);
        } else {
            map.put("ajaxisError", false);
        }
        // 验证规则的名称
        map.put("customAjaxRule", customAjaxRule);
        // 验证值的ID
        map.put("validateId", validateId);
        return map;
    }

其他的修改请看附件源码

原文链接

Jquery form validate验证框架(修改与扩展)二