2012-07-23 63 views
2

當我通過調用$ .validator setDefaults方法爲jQuery Validation插件設置了一些默認值時,errorPlacement方法運行正常,但invalidHandler函數完全被忽略了。爲什麼?

請注意,我在此實例中使用jQuery UI選項卡並使用.valid()調用驗證選項卡的各個字段(在窗體中),而不是完整的窗體.validate()調用。

任何有識之士非常感謝。

下面

簡化代碼:

(function($) { 
    //det up some site wide validator defaults 
    $.validator.setDefaults({ 
     invalidHandler: function(error, validator) { 
      console.log("InvalidHandler Test"); 
     }, 
     errorPlacement: function(error, element) { 
      error.appendTo("#error_validation span#errorSummary"); 
      $("#error_validation").show(); 
     } 
    }); 
    //small jQuery plugin for error handling in a jQuery UI tab 
    //by http://bit.ly/bhH1n1 
    $.fn.validateTab = function() { 
     var isValid = true; 
     $(this).find("input, select").each(function() { 
      if (isValid) { 
       isValid = $(this).valid(); 
      } else { 
       $(this).valid(); 
      } 
     }); 
     return false; 
    }; 


    $('#tabs').tabs(); 

    $('#addUserBtn').click(function (e) { 
     e.preventDefault(); 
     $("#addUser").validateTab(); 
    }); 

}); 
+0

似乎無法找到你的問題,但你可能想[嘗試這個插件](http://elclanrs.github.com/jq-idealforms/)作爲替代。 – elclanrs 2012-07-23 12:57:31

+0

一個簡單的測試顯示這個工作:http://jsfiddle.net/kzDnx/2/。你注意到你在做什麼有什麼不同嗎?另外,我注意到你永遠不會執行你正在創建的匿名函數。這是複製粘貼錯誤還是你的代碼實際上在做什麼? – 2012-07-23 21:20:07

+0

嗨安德魯,謝謝你!額頭拍打瞬間。令人難以置信的簡單混淆匿名函數和簡寫jQuery文檔就緒函數。只要指出我在這裏使用有效()的調用,但你確實是正確的。我已經重構了你的代碼來證明它:http://jsfiddle.net/awhenderson/xUYFt/5/。再次感謝 – alfonsogrondo 2012-07-25 10:25:14

回答

2

我真的不知道爲什麼它不工作,但我需要它,所以我固定它自己,如果你想更換插件通過setDefaults這個

setDefaults: function (settings) { 
    var validator = $.data($("form")[0], "validator"); 
    var originalSettings = jQuery.validator.getDefaults(); 
    for (var key in settings) { 
     if (settings[key]) { 
      originalSettings[key] = settings[key]; 
     } 
    } 
    validator.settings = $.extend(true, {}, $.validator.defaults, originalSettings); 
}, 
getDefaults: function() { 
    var validator = $.data($("form")[0], "validator"); 
    return validator.settings; 
},