表單驗證求助:怎么封裝一個方法,根據用戶傳入的驗證規則和提示信息實現表單驗證?

首先,請看HTML頁面代碼簡寫:

<form action="test.php" class="form">

    <h1 class="form_header">表單驗證</h1>
    <hr/>
    <ul class="form_content">
        <li>
            <label for="">用戶名</label>
            <input class="check" type="text" placeholder="請輸入用戶名"/>

            <div class="msg">
                <i></i>
                <span></span>
            </div>
        </li>
        <li>
            <label for="">用戶戶名</label>
            <input type="text" placeholder="請輸入用戶名"/>

            <div class="msg">
                <i></i>
                <span></span>
            </div>
        </li>
        <li>
            <label for="">用戶戶戶名</label>
            <input class="check" type="text" placeholder="請輸入用戶名"/>

            <div class="msg">
                <i></i>
                <span></span>
            </div>
        </li>
        <li>
            <label for="">用戶戶戶戶名</label>
            <input class="check" type="text" placeholder="請輸入用戶名"/>

            <div class="msg">
                <i></i>
                <span>dsafdfadsfas</span>
            </div>
        </li>
        <li>
            <label for="">用戶戶戶戶戶名</label>
            <input type="text" placeholder="請輸入用戶名"/>

            <div class="msg">
                <i></i>
                <span>gggggggggggg</span>
            </div>
        </li>
    </ul>

</form>

CSS代碼:

* {
  margin: 0;
  padding: 0;
  list-style: none;
}
.form {
  width: 800px;
  min-height: 700px;
  background: #cccccc;
  margin: 50px auto;
}
.form_content {
  padding: 10px;
}
.form_content li {
  height: 68px;
}
.form_content li label {
  display: inline-block;
  vertical-align: middle;
  width: 120px;
  text-align: right;
}
.form_content li input {
  width: 268px;
  height: 30px;
  line-height: 30px;
  padding: 5px;
  border-radius: 5px;
  outline: none;
}
.form_content li .msg {
  display: inline-block;
  vertical-align: middle;
  position: relative;
}
.form_content li .msg i {
  display: inline-block;
  vertical-align: middle;
  width: 0;
  height: 0;
  position: absolute;
  border-width: 12px;
  border-style: solid;
  border-color: transparent #51a3cc transparent transparent;
  left: -14px;
  top: -14px;
}
.form_content li .msg span {
  display: inline-block;
  vertical-align: middle;
  position: absolute;
  left: 10px;
  top: -20px;
  text-align: left;
  padding: 10px;
  min-width: 120px;
  color: #ffffff;
  border-radius: 5px;
  background-color: rgba(51, 153, 204, 0.8);
}

需求:

封裝一個插件,該插件會遍歷form表單里包含check的類,使用者調用該插件時只需傳入對應的規則和提示信息即可,其它工作交給插件進行校驗。該插件會根據用戶的規則進行校驗,如果驗證通過則執行正確的回調,否則則把錯誤的顯示信息顯示出來。
注①:在form表單中,需要進行校驗的在該標簽中添加一個check類,如
<input class="check" type="text" placeholder="請輸入用戶名"/>
注②:在HTML中有幾個check類,則在調用時需要傳入對應數量的規則。

以下是我的代碼構思,但是無法實現想要的效果,如果有哪位大神路過,請抽空指導一下,萬分感激!
JS代碼:

 (function ($) {
    $.fn.forms = function (obj) {

        //var _this = this;
        var rules = obj.rules || [];
        var msg = obj.msg || [];
        //var checkID = obj.checkID || "";

        $("form .check").each(function (i, j) {
            $(this).keyup(function () {
                if (obj.rules[i]) {
                    $(this).parent().siblings(".form_msg").hide();
                    $(this).addClass("right");
                    return false;
                } else {
                    $(this).removeClass("right");
                    $(this).addClass("wrong");
                    $(this).parent().siblings(".form_msg").show();
                    if (msg) {
                        $(this).parent().siblings(".form_msg").children("span").html(msg[i]);
                    }
                }
            });
        });
    };
})(jQuery);

//調用
$(function () {

    $(".msg").hide();

    $(".form").forms({
        rules: ["$(this).val().length>5", "$(this).val() == 'TEST'", "", ""],
        msg: ["提示信息1", "提示信息2", "提示信息3", "提示信息4"]
    });

});

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 22年12月更新:個人網站關停,如果仍舊對舊教程有興趣參考 Github 的markdown內容[https://...
    tangyefei閱讀 35,224評論 22 257
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • 本學期,我校開始了一門新選修課程——創業家說創新。該課程是由清華大學經管學院陸向謙教授創新的新型課程。即線上線下同...
    Deer77閱讀 390評論 0 0
  • 亞馬遜記錄:亞馬遜的移動應用讓用戶有一個流暢的無處不在的體驗的同時,也通過收集手機上的數據深入地了解了每個用戶的喜...
    恒跡彩象閱讀 178評論 0 0