JQueryEasyUI学习笔记(五)

欢迎大家转载,转载请注明出处!

希望这个笔记对自己和大家有用,但是本人水平有限,如果出错的地方,希望大家指出,多多批评,谢谢!

今天使用easyui自带的form提交方式写一个注册表单,使用其自带的ValidateBox验证方式并扩展其验证方法:

这篇笔记竟然被移出首页了,有点小纳闷,好吧,以后写代码注释多写到代码外面把,写在代码里面,只不过是为了自己和大家看得时候方便而已。

 

这里出发form的submit事件,将数据提交给后台

这里的提交个人觉得不是纯正的ajax提交,因为有刷新页面 //以为我们的form有validate方法,而且在源码中也有判断,所以我们直接这样submit就可以触发validatebox的验证方法
$.fn.form.defaults={url:null,onSubmit:function(_2e){return $(this).form("validate");
如果我们不使用easyui的form框架的提交方式,用JQ的异步提交,我们就需要这样写:
if($("#regist").form("validate")){}

<script type="text/javascript">
        $(function () {
            //初始化登陆层
            initLogin();
            //首先隐藏注册的层
            $("#regist").css("display", "none");
            //注册Form
            initForm();
        });

        //个人习惯方法化书写
        function initLogin() {
            $("#login").dialog({
                closable: false, //右上角的关闭按钮,因为dialog框架关联的是window框架,window框架关联的是panel框架,所以该API是在panel框架中找到的
                title: "登陆界面", //dialog左上角的名称
                modal: true, //模式化
                width: 300,
                height: 200,
                buttons: [//dialog右下角的按钮,以Json数组形式添加
                   {
                   text: "登录", //按钮名称
                   iconCls: "icon-save", //按钮左侧显示的图片
                   handler: function () {//按钮点击之后出发的方法
                       //JQuery的ajax异步后台提交
                       loginFunc();
                   }
               }, {
                   text: "注册",
                   handler: function () {
                       //注册明天再写,将用easyui自带的form提交方式,以及自带的ValidateBox验证方式
                       registFunc();
                   }
               }]
            });
        }

        //用户登录
        function loginFunc() {
            //这里我写的是最简略的JQuery异步方法,如想深入了解,请参看JQuery参考手册
            //要想后台传递的参数
            var res = $("#loginForm").serialize(); //将form表单的内容序列化,这里也可以使用原始的取值方法
            //mvc以及webform中可以直接传递到后台
            $.post("/Login.ashx", res, function (data) {
                if (data == "ok") {//后台传递过来 ok 表示登陆成功
                    $("#dd").dialog("close"); //关闭该dialog
                    $.message.show({//浏览器右下角弹框,我列出了几个属性,具体请看API
                        title: '提示',
                        msg: '恭喜您,登陆成功!',
                        timeout: 5000, //弹框保留时间
                        showType: 'slide'//展示样式
                    });
                } else {
                    $.message.alert('提示', "登陆失败", "error"); //这里使用easyui的message框架,弹出提示信息
                    //这里有三个参数 第一个是Title 第二个是显示信息 第三个是现实图标样式 有error,warning等,具体请看API或者demo
                }
            });
        }


        //注册方法
        function registFunc() {
            //弹出注册的层,并关闭当前登录的层
            $("#login").dialog("close");
            //初始化注册层
            initRegist();
        }

        //初始化注册层
        function initRegist() {
            //注册层隐藏关闭
            $("#registForm").dialog({
                closable: false,
                title: "注册界面",
                modal: true,
                width: 300,
                height: 600,
                buttons: [
                   {
                       text: "注册",
                       handler: function () {
                           //这里出发form的submit事件,将数据提交给后台
                           //这里的提交个人觉得不是纯正的ajax提交,因为有刷新页面                           //以为我们的form有validate方法,而且在源码中也有判断,所以我们直接这样submit就可以触发validatebox的验证方法
                           //$.fn.form.defaults={url:null,onSubmit:function(_2e){return $(this).form("validate");
                           //如果我们不使用easyui的form框架的提交方式,用JQ的异步提交,我们就需要这样写:
                           //if($("#regist").form("validate")){}
                           $("#registForm").submit();
                       }
                   }, {
                       text: "关闭",
                       handler: function () {
                           //关闭注册的dialog
                           $("#regist").dialog("close");
                           //开启登陆层
                           $("#login").dialog("open");
                       }
                   }]
            });
        }

        //初始化注册Form
        function initForm() {
            $("#registForm").form({
                url: "Login.ashx",
                success: function (data) {
                    if (data == "ok") {//注册成功
                        $.message.alert('提示', "注册成功", "error");
                        $("#dd").dialog("open");
                    } else {
                        $.message.alert('提示', "注册失败", "error");
                    }
                }
            });
        }

        //这里是扩展validatebox的方法
        $.extend($.fn.validatebox.defaults.rules, {
            phone: {
                // 验证手机号码
                validator: function (value) {
                    return /^(13|15|18)\d{9}$/i.test(value); //这里就是一个正则表达是
                },
                message: '手机号码格式不正确'//这里是错误后的提示信息
            },
            pwdagain: {
                validator: function (value, param) {
                    return value == $(param[0]).val(); //value是不用我们去填写的,但是param是需要我们提供的,使用方法为 pwdAgain[""]
                },
                message: '两次密码不一致'//这里是错误后的提示信息
            }
        });
    </script>

 

这里的文本框全部采用validatebox框架,并采用其自带的验证方式,但是自带的验证方式并不能满足我们在编程中的需求,所以我会扩展几个他的验证方法,其中扩展方法我在之前的博客中已经写过,这里再给大家演示一下
 data-options在这个里面写一些规则,比如easyui自带的验证方式,required:true必填项,validType:'email'必须是邮箱格式,当然这些我们都可以自己去扩展,其中自己扩展的方法书写形式类似validType:'email',validType:'phone'这是我自己扩展的验证手机号码的方法
这是validatebox自带remote验证方法的源码,我们可以看出,这里不是异步的,所以使用可能会早场卡屏,不推荐使用
remote: { validator: function (_2a, _2b) {
var _2c = {};
_2c[_2b[1]] = _2a;
var _2d = $.ajax({ url: _2b[0], dataType: "json", data: _2c, async: false, cache: false, type: "post" }).responseText;
return _2d == "true";
}, message: "Please fix this field."
}

<body>
    <div id="login">
        <form id="loginForm" method="POST">
        <table>
            <tr>
                <th>
                    用户名
                </th>
                <td>
                    <input name="username" type="text" />
                </td>
            </tr>
            <tr>
                <th>
                    密码
                </th>
                <td>
                    <input name="password" type="password" />
                </td>
            </tr>
        </table>
        </form>
    </div>
    <!-- 用户注册-->
    <div id="regist" style="border: 1px #0000cd solid;">
        <form id="registForm" method="POST">
        <table>
            <tr>
                <th>
                    用户名
                </th>
                <td>
                    <input name="name" id="name" class="easyui-validatebox" data-options="required:true" />
                    <!-- 这里的文本框全部采用validatebox框架,并采用其自带的验证方式,但是自带的验证方式并不能满足我们在编程中的需求,所以我会扩展几个他的验证方法,其中扩展方法我在之前的博客中已经写过,这里再给大家演示一下-->
                    <!-- data-options在这个里面写一些规则,比如easyui自带的验证方式,required:true必填项,validType:'email'必须是邮箱格式,当然这些我们都可以自己去扩展,其中自己扩展的方法书写形式类似validType:'email',validType:'phone'这是我自己扩展的验证手机号码的方法-->
                    <!--这是validatebox自带remote验证方法的源码,我们可以看出,这里不是异步的,所以使用可能会早场卡屏,不推荐使用
        remote: { validator: function (_2a, _2b) {
        var _2c = {};
        _2c[_2b[1]] = _2a;
        var _2d = $.ajax({ url: _2b[0], dataType: "json", data: _2c, async: false, cache:             false, type: "post" }).responseText;
        return _2d == "true";
        }, message: "Please fix this field."
                    }-->
                </td>
            </tr>
            <tr>
                <th>
                    密码
                </th>
                <td>
                    <input name="pwd" id="pwd" class="easyui-validatebox" data-options="required:true" />
                </td>
            </tr>
            <tr>
                <th>
                    重复密码
                </th>
                <td>
                    <input name="passwordagain" id="passwordagain" class="easyui-validatebox" data-options="required:true"
                        validtype="pwdagain['#registForm input[name=pwd]']" /><!--取得重复密码中的值并传入,这里调试了半天,因为各种不仔细报错,希望大家避免-->
                    <!-- 经验证,data-options="required:true,validType='pwdagain['#registForm input[name=pwd]']'"这种写法会报错,望大家注意-->
                </td>
            </tr>
            <tr>
                <th>
                    邮箱
                </th>
                <td>
                    <input name="mail" id="mail" class="easyui-validatebox" data-options="required:true,validType:'email'" />
                </td>
            </tr>
            <tr>
                <th>
                    手机
                </th>
                <td>
                    <input name="phone" id="phone" class="easyui-validatebox" data-options="required:true,validType:'phone'" />
                </td>
            </tr>
        </table>
        </form>
    </div>
</body>

 

 

 

posted @ 2013-03-28 21:50  光之暗面  阅读(2543)  评论(3编辑  收藏  举报
http://i.WoTuLa.com/note.png?name=石岩&say=暂时的停滞不前,只是在积攒力量