JQuery Validate 搭配 Bootstrap tooltip or Popover 的作法

原先的做法是使用 JQuery Validate 來做前端驗證,把錯誤訊息會直接長在Html element的後面

這作法堪用,但是會把原本畫面的版型破壞

所以改利用搭配Bootstrap來把錯誤訊息改成彈跳在被驗證錯誤的Html element上面

 

原先的做法是使用 JQuery Validate 來做前端驗證,把錯誤訊息會直接長在Html element的後面

這作法堪用,但是會把原本畫面的版型破壞

所以改利用搭配Bootstrap來把錯誤訊息改成彈跳在被驗證錯誤的Html element上面

我透過 validate 裡面的 showErrors 來取得錯誤的清單(errorList)跟成功的清單(this.successList)

錯誤清單內是一個物件的陣列,每個物件會長這樣 :(錯誤訊息、Html element、驗證的method)

{message: "請輸入數字", element: input#userID.required.number.error, method: "number"}

 

var form = $("#form");
form.validate({ 
showErrors: function (errorMap, errorList) {
                $(errorList).each(function (index, errObj) {
                    //驗證成功
					//tooltip選項
                    var option = {
                        trigger : 'click hover focus manual',
                        placement:'right',
                        title:errObj.message
                    }
                    $(errObj.element).tooltip('destroy');//必要,如果你有多條規則驗證,
                    //像是required number放在一起,如果不先清除的話,訊息會一直重複上一次的
                    $(errObj.element).tooltip(option);
                    $(errObj.element).on('shown.bs.tooltip', function () {
                        setTimeout(function () {
                            $(errObj.element).tooltip('hide');
                        }, 3000);
                    });
                    $(errObj.element).tooltip('show');
                    $(errObj.element).addClass('error');
                 
                })
                $(this.successList).each(function (index, element) {
					//驗證成功
                    $(element).tooltip('destroy');
                    $(element).removeClass('error');
                })
            }
});