简单的前端校验框架实现

前端表单在提交前总是要进行校验的,而这些工作是繁琐的,所以这儿写了一个简单的校验框架,代码实现如下:

function Validate(id){
    if(arguments.length != 1){
        throw new Error("Argument is required");
    }
    this.errors = [];
    this.id = id;
    this.container = $("#" + id);
}

Validate.prototype = {
    constructor : Validate,
    rules : [
        "required"
    ],
    rulesCallback : {
        messages : {
            required: ‘The %s field is required.‘
        },
        required : function(control){
            var value = control.value;
            if ((control.type === "checkbox") || (control.type === "radio")) {
                var controls = $("input[name=‘" + control.name + "‘]");
                for(var i=0; i<controls.length; i++){
                    if(controls[i].checked === true){
                        return "";
                    }
                }
            }
            else if(value && value.length > 0){
                return "";
            }
            return this.messages.required.replace("%s", control.name);
        }
    },
    validate : function(){
        this.errors.clear();
        var controls = this.container.find(".validate");
        if(controls != null){
            for(var i=0; i<controls.length; i++){
                for(var j=0; j<this.rules.length; j++){
                    if(controls.hasClass(this.rules[j])){
                        var error = this.rulesCallback[this.rules[j]](controls[i]);
                        if(error.length > 0){
                            this.errors.push(error);
                        }
                    }
                }
            }
        }
        return this.errors.length == 0 ? true:false;
    }
}

现在这儿只是实现了required的校验,如果要添加其他校验可以按照如下步骤

rules : [
    "required"
],
rulesCallback : {
    messages : {
        required: ‘The %s field is required.‘
    },
    required : function(control){
        var value = control.value;
        if ((control.type === "checkbox") || (control.type === "radio")) {
            var controls = $("input[name=‘" + control.name + "‘]");
            for(var i=0; i<controls.length; i++){
                if(controls[i].checked === true){
                    return "";
                }
            }
        }
        else if(value && value.length > 0){
            return "";
        }
        return this.messages.required.replace("%s", control.name);
    }
},

1. 首先在rules中添加校验的类型;

2. 在rulesCallback的message中添加校验错误时的提示文本,其中%s是占位符,会使用表单元素的name值来替换。提示文本的名字要和校验类型相同;

3. 在rulesCallback中添加一个和校验类型相同的方法,并在方法中完成对某一控件的校验实现;

通过以上步骤就添加好了校验规则,然后看一下使用,代码如下:

<!DOCTYPE>
<html>
<head>
    <title>demo</title>
</head>
<body>
<div id="form">
    alias<input class="validate required" name="alias"  type="text"/><br/>
    Content<input class="validate required" name="content" type="text" /><br/>
    public<input class="validate required" name="publiz" type="radio" />Private
    <input class="validate required" name="publiz" type="radio" />Public<br/>
    <button id="btnOK">OK</button>
</div>
<script src="jquery-3.2.1.js"></script>
<script src="validate.js"></script>
<script>
$(function(){
    var val = new Validate("form");
    $("#btnOK").click(function(){
        val.validate();
        alert(val.errors);
    });
});
</script>
</body>
</html>

因为该框架实在jquery下工作的,所以先要导入jquery库,然后根据包含表单控件的元素的id属性来创建一个校验对象,这样就可以在后面使用,如上在点击ok按钮后开始进行校验,通过val.valdate()方法返回是否是false,就可以知道是否有表单元素的值不合法,如果有不合法的可以通过val.errors来获得提示语句。

其他规则的校验会在后面添加。

原文地址:https://www.cnblogs.com/lvniao/p/9591444.html

时间: 2024-10-12 02:44:45

简单的前端校验框架实现的相关文章

前端校验框架ValidForm之check方法修正

用过validform的朋友相信都知道,在利用check方法的时候,发现该方法对表单输入值只要符合datatype规则的就返回ture.那么我们想对某个字段进行ajax重复校验的时候,只需要在该表单元素添加ajaxurl就可以了,但是check方法并没有对ajaxurl返回过来的值进行捕捉,即ajaxurl返回{status:no}的情况下,只有其他校验都通过,check返回的结果都是true.这样一来,利用check方法的人就希望能修复这个问题.在此我提供了个人的方法对框架进行了改动,希望帮到

python实现简单表单校验框架

# encoding=utf-8 from app.models import Student from flask import g import re from flask.ext.wtf import Form from wtforms import StringField, RadioField, PasswordField, TextAreaField, BooleanField, DateField, ValidationError, IntegerField from wtform

一个简单的前端事件框架

参考网上的一个资料,做下备注. <html> <head> <title>js event demo</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv=&

3.ASP.NET全栈开发之前端校验(基于Vue的自定义校验)自实现小型验证框架

前面分享了两篇关于.NET的服务端校验的文章,在系统里光有服务端校验虽然能够勉强使用,但会出现许多不愉快的体验,如上一章我在最后提交的时候填写了3个表单,在仅有最后一个表单出现了错误的时候,虽然达到了校验功能,表明了错误,但我前面三个表单的数据都被干掉了啊.再则比如注册的时候我填了那么多东西,我提交后你却告诉我已经被注册了,如果不是真爱,大概会毫不留情的Alt+F4 再也不见啦. 为了解决这个问题,我们必须在系统中采用双校验,前端校验那么多,咱们ASP.NET MVC创建时默认会引入jquery

Java 简单校验框架

数据校验框架现状 在我们的方法入口后面,难免会有如下样子的代码: result.setSuccess(false); if (StringUtils.isBlank(bizOrder.getThirdOrder())) { result.setResultMessage("thirdOrder不能为空"); return result; } if(bizOrder.getThirdOrder().length() > 100){ result.setResultMessage(&

自己写的基于java Annotation(注解)的数据校验框架

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对

web前端ui框架好用的有哪几个

如今移动端网站越来越火热,移动端的网站也纷纷崛地而起,在进行web前端开发(http://www.maiziedu.com/course/web/)时,需要用到适合自己项目的框架就需要有偶遇的机会,特别是适合移动端的web前端框架,很难遇得到,下面小编就推荐几款合适的移动web 前端ui框架给大家,能大大提升我们的开发效率. Amaze UI Amaze UI是一个轻量级(所有CSS和JS gzip后100kB左右).Mobile first的前端框架, 基于开源社区流行前端框架编写. Froz

960网格布局框架(前端css框架)的使用方法

960框架总宽960px CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间.在此,我们将不再讨论这个问题. 前段时间,我了解到了CSS框架.经过对Malo.BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架. 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发. 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”.你可以通过实验(或者是用fir

前端常用框架知识点收集

前端组件库 搭建web app常用的样式/组件等收集列表(移动优先) 0. 前端自动化(Workflow) 前端构建工具 Yeoman – a set of tools for automating development workflow gulp – The streaming build system grunt – the JavaScript Task Runner F.I.S – 前端集成解决方案 前端模块管理器 Bower – A package manager for the w