[JQuery Validator]debug 紀錄

好久沒有碰JQuery 

用了Validator發現很卡

紀錄一下....

1. 寫好Validator 後發現無法送出?
debug: true 記得拿掉

$validator = $("#Form")
        .submit(function (e) {
            e.preventDefault();
        }).validate({
            debug: true,
            rules: {
               ...
            },
            messages: {
                ...
            },
       });
            

2. Validator.resetForm() not working?

取消的button type必須是button or reset

<form>
...

<input type="submit" id="btnSave" class="btn btn-outline-success" value="儲存">
<button type="button" id="btnCancel" class="btn btn-outline-dark">取消</button>
</form>

3. 遇到下拉選單會失效?

 在Validate內加上ignore: ""即可。 因為Select option 如果是使用bootstrap或者是套件的話 預設display為none
 這個時候Validator就會忽略這個html tag

4. 要怎麼知道AddMethod真的有被load進來?

可以在chrome的console畫面 輸入$.Validator.methods['addMethodName'] 就會列出你新增的Method內容喔!

5.怎麼將Validator error Message新增到你想要加的位置?

這個狀況很考驗你的JQuerySelector功力 因為每個人的html tag狀況不一樣,所以很難明確寫出來
這邊只列了幾個比較特殊的狀況

這邊將以這個HTML做範例

  • 要將某一個input name = item1 錯誤訊息顯示在form-group之後
<form id="Form">
     <div data-role="body">
         <div class="row">
              <div class="form-group">
                   <label for="item2">item2:</label>
                   <input id="item2" name="item2" required placeholder="item2" />
              </div>
         </div>
         <div class="row">
              <div class="form-group">
                    <label for="item1">item1:</label>
                    <input id="item2" name="item1" class="form-control" required placeholder="item1" />
              </div>
         </div>
         <div data-role="footer" class="d-flex justify-content-center">
              <input type="submit" id="btnSave" class="btn btn-outline-success" value="儲存">
              <button type="button" id="btnCancel" class="btn btn-outline-dark">取消</button>
         </div>
     </div>
</form>

如果我想要將錯誤訊息加在form-group的後面

$('form').submit(function (e){
   e.preventDefault();
}).validator({
            ...,
            errorPlacement: function (error, element) {
                if (element.attr("name") == "item1") { //當tag name是item1時 顯示在.form-group結束之前
                    error.insertAfter($(element).closest('.form-group')); 
                } else {
                    error.insertAfter(element); 
                    //一般來說都是塞在control的正後方,但如果你的contorl是放在同一列的時候你就會破版
                }
            }
})
  • 要將錯誤訊息顯示在某一個區塊內 這裡假設是form的正上方
<div id="error-message" class="alert alert-danger" role="alert"></div>
<form id="Form">
    <div data-role="body">
        ...
    </div>
</form>
$("#Form").submit(function (e) {
    e.preventDefault();
}).validate({
    rules: {
        ...
    },
    messages: {
        ...
    },
    errorPlacement: function (error, element) {
        $("#error-message").append(error); //簡單吧
        $("#error-message").show();
    }
)};

目前就這些囉!如果還有別的再加上來..

-----------------------------------------

有時在會走之前你就得跑

你不解決問題 就等問題解決你