2012-07-23 72 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; 
},