给表单加上验证

111 篇文章 0 订阅

如有不明白的地方欢迎加QQ群14670545 探讨

我们在上一节讲了给文本框加上提示效果,这节我们来完善上一节的demo。

加上一些表单项的验证,比如email格式,正整数,不能为空.....,这时候我们需要一个jquery的表单验证插件,可以去官网上下载:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/
http://docs.jquery.com/Plugins/Validation

还需要一个扩展插件,以方便我们用中文,不然提示效果都是英文的。所以配合一个messages_cn.js:

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: CN
 */
jQuery.extend(jQuery.validator.messages, {
        required: "<font style=\"color:#f00; margin-left:5px;\">不能为空</font>",
        remote: "<font style=\"color:#f00;\">请修正该字段</font>",
        email: "<font style=\"color:#f00;\">电子邮件格式有误</font>",
        url: "<font style=\"color:#f00;\">请输入合法的网址</font>",
        date: "<font style=\"color:#f00;\">请输入合法的日期</font>",
        dateISO: "<font style=\"color:#f00;\">请输入合法的日期 (ISO)</font>",
        number: "<font style=\"color:#f00;\">请输入合法的数字</font>",
        digits: "<font style=\"color:#f00;\">只能输入整数</font>",
        creditcard: "<font style=\"color:#f00;\">请输入合法的信用卡号</font>",
        equalTo: "<font style=\"color:#f00;\">请再次输入相同的值</font>",
        accept: "<font style=\"color:#f00;\">请输入拥有合法后缀名的字符串</font>",
        maxlength: jQuery.validator.format("<font style=\"color:#f00;\">长度最多 {0} 个字符</font>"),
        minlength: jQuery.validator.format("<font style=\"color:#f00;\">长度最少 {0} 个字符</font>"),
        rangelength: jQuery.validator.format("<font style=\"color:#f00;\">长度要在 {0} 和 {1} 之间</font>"),
        range: jQuery.validator.format("<font style=\"color:#f00;\">请输入一个介于 {0} 和 {1} 之间的值</font>"),
        max: jQuery.validator.format("<font style=\"color:#f00;\">请输入一个最大为 {0} 的值</font>"),
        min: jQuery.validator.format("<font style=\"color:#f00;\">请输入一个最小为 {0} 的值</font>")
});
这里只是随便百度找的,好像有个更好的插件叫formValidator,有兴趣的在看完这一节可以去找下,然后配合练习下咯 大笑

考虑到我们的表单有很多种情况,所有验证的那个属性参数必然是个枚举。好的,现在我们把昨天的那个自定义放服务器控件重新修改一下。

新建一个枚举类ControlMenu.cs:

namespace CustomerWebControls
{
    /// <summary>
    /// 文本框样式类型
    /// </summary>
    public enum InputClassType
    {
        /// <summary>
        /// 文本框
        /// </summary>
        input,
        /// <summary>
        /// //文本域
        /// </summary>
        textarea
    }

    /// <summary>
    /// 验证类型
    /// </summary>
    public enum ValidataType
    {
        /// <summary>
        /// 不能为空
        /// </summary>
        required,
        /// <summary>
        /// 请修正该字段
        /// </summary>
        remote,
        /// <summary>
        /// 电子邮件格式有误
        /// </summary>
        email,
        /// <summary>
        /// 请输入合法的网址
        /// </summary>
        url,
        /// <summary>
        /// 请输入合法的日期
        /// </summary>
        date,
        /// <summary>
        /// 请输入合法的日期 (ISO)
        /// </summary>
        dateISO,
        /// <summary>
        /// 请输入合法的数字
        /// </summary>
        number,
        /// <summary>
        /// 只能输入整数
        /// </summary>
        digits,
        /// <summary>
        /// 请输入合法的信用卡号
        /// </summary>
        creditcard,
        /// <summary>
        /// 请再次输入相同的值
        /// </summary>
        equalTo,
        /// <summary>
        /// 请输入拥有合法后缀名的字符串
        /// </summary>
        accept
    }
}

然后我们来修改CCTextBox.cs:

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomerWebControls
{
    [DefaultProperty("IsValidata"), ToolboxData("<{0}:CCTextBox runat=server />")]
    public class CCTextBox : TextBox, ICustomControl
    {
        /// <summary>
        /// 是否验证输入的合法性
        /// </summary>
        [Bindable(true), Category("Appearance"), DefaultValue(true), Localizable(true)]
        public bool IsValidata
        {
            get { return ViewState["IsValidata"] != null ? (bool)ViewState["IsValidata"] : false; }
            set { ViewState["IsValidata"] = value; }
        }

        /// <summary>
        /// 检测类型
        /// </summary>
        [Bindable(true), Category("Appearance"), DefaultValue(null), Localizable(true)]
        public ValidataType ValidataType
        {
            set { ViewState["ValidataType"] = value; }
            get { return ViewState["ValidataType"] != null ? (ValidataType)ViewState["ValidataType"] : ValidataType.required; }
        }

        /// <summary>
        /// 文本框的样式
        /// </summary>
        [Bindable(true), Category("Appearance"), DefaultValue(InputClassType.input), Localizable(true)]
        public InputClassType InputMolde
        {
            set { ViewState["InputMolde"] = value; }
            get { return ViewState["InputMolde"] != null ? (InputClassType)ViewState["InputMolde"] : InputClassType.input; }
        }

        protected override void OnPreRender(EventArgs e)
        {
            CssClass = InputMolde + (IsValidata == true ? " required " + ValidataType.ToString() : "");
            base.OnPreRender(e);
        }
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
        }
    }
}

生成一下,然后引用一下,拖一个CCTextBox到页面上去,然后我们添加下IsValidata和ValidataType属性,页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ccPage.aspx.cs" Inherits="MyWebSiteTest.Manager.ccPage" %>

<%@ Register Assembly="CustomerWebControls" Namespace="CustomerWebControls" TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>测试封装的控件</title>
    <script src="../Js/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script src="../Js/formvalidator4.1.3/jquery.validate.min.js" type="text/javascript"></script>
    <script src="../Js/formvalidator4.1.3/messages_cn.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $(".input,.textarea").focus(function () {
                $(this).addClass("focus");
            }).blur(function () {
                $(this).removeClass("focus");
            });

            //输入框提示,获取拥有HintTitle,HintInfo属性的对象
            $("[HintTitle],[HintInfo]").focus(function (event) {
                $("*").stop(); //停止所有正在运行的动画
                $("#HintMsg").remove(); //先清除,防止重复出错
                var HintHtml = "<ul id=\"HintMsg\"><li class=\"HintTop\"></li><li class=\"HintInfo\"><b>" + $(this).attr("HintTitle") + "</b>" + $(this).attr("HintInfo") + "</li><li class=\"HintFooter\"></li></ul>"; //设置显示的内容
                var offset = $(this).offset(); //取得事件对象的位置
                $("body").append(HintHtml); //添加节点
                $("#HintMsg").fadeTo(0, 0.85); //对象的透明度
                var HintHeight = $("#HintMsg").height(); //取得容器高度
                $("#HintMsg").css({ "top": offset.top - HintHeight + "px", "left": offset.left + "px" }).fadeIn(500);
            }).blur(function (event) {
                $("#HintMsg").remove(); //删除UL
            });
        });
        $(document).ready(function () {
            $("#form1").validate();
        });
    </script>
    <link href="images/example.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">       
        <div style=" margin:0 auto; width:600px;">  
            <div style=" height:100px;"></div>
            <cc1:CCTextBox ID="CCTextBox1" runat="server" Width="200" IsValidata="true" ValidataType="email" HintTitle="提示" HintInfo="这是提示的内容你懂的" ></cc1:CCTextBox><br /><br />
            <asp:Button runat="server" ID="btnSubmit" Text="提交" CssClass="submit" />
        </div>
    </form>
</body>
</html>

如果不指定ValidataType属性,那么默认是不能为空的验证(当然,前提是IsValidata属性必须是true,否则不进行验证),OK,来测试下效果:




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值