jquery errorPlacement

时间:2010-05-28 17:34:23

标签: jquery errorplacement

我有以下内容:

$("#pmtForm").validate({
            rules: {
                    acct_name: "required",                        
                    acct_type: "required",  
                    acct_routing:  { 
                                     required: true,    
                                     digits: true,
                                     exactLength:9
                                     }, 
                    acct_num:      { 
                                     required: true,    
                                     digits: true
                                     }, 
                    c_acct_routing:{ 
                                     equalTo: '#acct_routing'
                                     },     
                    c_acct_num:    { 
                                     equalTo: '#acct_routing'
                                     }      
            },
            messages: {
                    acct_name: "<li>Please enter an account name.</li>",
                    acct_type: "<li>Please choose an account type.</li>",
                    acct_routing: "<li>Please enter a routing number.</li>",
                    acct_num: "<li>Please enter an account number.</li>",
                    c_acct_routing: "<li>Please confirm the routing number.</li>",
                    c_acct_num: "<li>Please confirm the account number.</li>"
            },

        //  errorContainer: '#div.error',

            errorPlacement: function(error, element) {
                $('#errorList').html("");
                $('#errorList').append(error);
                $('div.error').attr("style","display:block;");  
            } 
        });

我正在尝试将错误消息插入到表单上方的div中。我的问题是如果我删除这一行:$('#errorList')。html(“”);然后它第一次正确显示错误消息。如果我再次点击提交,它会向div添加另一组消息。如果我保留$('#errorList')。html(“”);然后我将只收到一条错误消息。

  • 请输入一个帐号。
  • 如何刷新errorList,使其不重复并正确显示错误消息?

    提前感谢。

    4 个答案:

    答案 0 :(得分:2)

    我认为你所追求的是更合适的errorContainer, errorLabelContainer and wrapper options,就像这样:

    $("#pmtForm").validate({
            rules: { ... },
            messages: { ... },
            errorContainer: '#errorList',
            errorLabelContainer: "#errorList ul",
            wrapper: 'li'
    });
    

    您现在可以从错误消息中删除<li></li>包装,这将包装它们,然后放在<div id="#errorList"><ul></ul></div>中,并在没有错误时隐藏<div>:)< / p>

    答案 1 :(得分:2)

    jQuery验证将为您控制错误消息的状态。也就是说,你不应该使用:

    $('#errorList').html("");
    

    控制错误容器的状态。在这种情况下,您应该可以使用:

    errorContainer: '#div.error'
    

    errorPlacement更倾向于允许您将错误消息附加到一个非常特定的容器(即:TR中为错误消息保留的最后一个TD)。

    如果您使用类似FireBug的工具,您将看到jQuery Validation会将错误消息附加到您的错误容器,并根据表单的元素是否通过其规则来控制其可见性。

    此外,您不需要将错误消息包装在HTML中,您可以使用:

    wrapper: "li"
    

    答案 2 :(得分:1)

    我认为你只需要将它添加到你的验证方法中 errorContainer: errorList errorLabelContainer: $("ol", container), wrapper: 'li',

    试试看......

    答案 3 :(得分:1)

    这有效:

      $("#addPmtAcctForm").validate({
                rules: {
                        acct_name: "required",                        
                        acct_type: "required",  
                        acct_routing:  { 
                                         required: true,    
                                         digits: true,
                                         exactLength:9
                                         }, 
                        acct_num:      { 
                                         required: true,    
                                         digits: true
                                         }, 
                        c_acct_routing:{ 
                                         equalTo: '#acct_routing'
                                         },     
                        c_acct_num:    { 
                                         equalTo: '#acct_num'
                                         }      
                },
                messages: {
                        acct_name: "<li>Please enter an account name.</li>",
                        acct_type: "<li>Please choose an account type.</li>",
                        acct_routing: "<li>Please enter a routing number.</li>",
                        acct_num: "<li>Please enter an account number.</li>",
                        c_acct_routing: "<li>Please confirm the routing number.</li>",
                        c_acct_num: "<li>Please confirm the account number.</li>"
                },
    
                errorLabelContainer: $("ul", $('div.error')), wrapper: 'li',
    
                errorContainer: $('div.error'),
    
                errorPlacement: function(error, element) {
                    $('#errorList').append(error);
                } 
            });