学习--jquery 自定义插件 可扩展 表单验证

(function ($) {

    var defaults = {}

    $.fn.extend({

        /**
         * 为指定元素添加验证
         */
        validate: function (options) {

            var options = $.extend(defaults, options);
            if ($(this).attr("validate")) {
                $(this).blur(function () {
                    // 为每个标签分配验证规则
                    var result = val_adapter($(this));
                    return result;
                });
            }
        }
        ,
        /**
         * 提交表单添加验证
         */
        validateForm: function () {

            var result = false;
            $('input,textarea', $(this)).each(function () {
                if ($(this).attr("validate")) {
                    result = val_adapter($(this));
                    if (!result) {
                        // 如果有一个false 就直接跳出form循环
                        return result;
                    }
                }
            });
            return result;
        }
    })
    ;

    /**
     * 标签提示样式
     * @param booleanVal 是否加载样式
     */
    var val_promptStyle = function (obj, booleanVal, msg) {

            // 移除样式
            $(obj).siblings('span.clx-warnning-msg').remove();
            if (!booleanVal) {
                // 添加样式
                var span_show = $('<span class="clx-warnning-msg clx-fr"></span>').html(msg);
                $(obj).before(span_show);
            }
        }
        ;

    /**
     * 字符串转成 json对象
     * @param str 针对这种类型的字符串 (validate="isNotNull: true, isNotNum: true")
     * @returns {Object}
     */
    var stringConvertJson = function (str) {
            // 对象前缀
            var prefix = '[{';
            // 对象后缀
            var suffix = '}]';
            // 拼接 json串 (string 型)
            var json = prefix + str + suffix;
            // console.log(typeof json);
            // 将string 转为json
            var result = eval(json);
            return result;
        }
        ;
    /**
     * 验证方法适配器 为每个标签分配验证规则
     */
    var val_adapter = function (obj) {

            var resultBol = false;
            var validate = $(obj).attr('validate');
            var jsonObj = stringConvertJson(validate)[0];
            // 1.非空验证
            if (jsonObj.isNotNull) {
                resultBol = val_isNotNull(obj);
            }
            // 2.纯数字验证 && 上一个验证通过后
            if (jsonObj.isNotNum && resultBol) {
                resultBol = val_isNotNum(obj);
            }
            // 3.数字范围验证 && 上一个验证通过后
            if (jsonObj.valRange && resultBol) {
                resultBol = val_range(obj, jsonObj.valRange);
            }
            return resultBol;
        }
        ;

    /**
     * 1.非空验证
     */
    var val_isNotNull = function (obj) {

            var resultBol = false;
            var msg = '(此处不得为空,请重新填写)';

            if ($(obj).val()) {
                resultBol = true;
                msg = '';
            }
            val_promptStyle(obj, resultBol, msg);
            return resultBol;
        }
        ;

    /**
     * 2.数字验证
     */
    var val_isNotNum = function (obj) {

            var regexp = /^\d+$/;
            var resultBol = false;
            var objVal = $(obj).val();
            var msg = '请输纯数字!';

            if (regexp.test(objVal)) {
                resultBol = true;
                msg = '';
            }
            val_promptStyle(obj, resultBol, msg);

            return resultBol;
        }
        ;

    /**
     * 3.数字使用范围验证
     * @param range 指定数字范围 例如: validate="valRange: '0-9'"
     * 备注: 动态拼接 js正则表达式 var regexp = new RegExp('^' + regexp + '$', 'g');
     *
     */
    var val_range = function (obj, range) {

            var resultBol = false;
            // 强转为int防止出问题
            var objVal = $(obj).val();
            // 将值转为数组
            var arrayRange = range.split('-');
            // 将值转为数组 用数组中的值做范围判断
            var arr0 = parseInt(arrayRange[0]);
            var arr1 = parseInt((arrayRange[1]) ? arrayRange[1] : arrayRange[0]);
            // 拼接提示语
            var msg = '字符长度应为 [' + range + ']!';

            if (objVal.length >= arr0 && objVal.length <= arr1) {
                resultBol = true;
                msg = '';
            }
            val_promptStyle(obj, resultBol, msg);

            return resultBol;
        }
        ;

})(jQuery);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值