2015-07-20 76 views
0

我有一个表格,只有数字验证的文本框。错误显示在jQueryUI模式窗口中。但是,当在文本框中输入非数字时,我最终会多次出现相同的错误消息。而我输入的非数字值越多,我得到的重复数就越多。任何建议将不胜感激。验证文本框中的数字与jQuery验证

这里是初始验证

enter image description here

这里是验证部分固定

enter image description here

这里是验证消息时,我输入一个非数字的值。注意多个Please enter only digits消息。

enter image description here

这里是代码。

var valForm = function(kit_id) { 
    var form = $("#frm_" + kit_id); 
    var strErrors = "<ul>"; 

     form.validate({ 
      errorClass: "error-class", 
      errorElement: "div", 
      errorPlacement: function(error, element) { 
       console.log(error); 
       strErrors += "<li>" + error[0].innerHTML + "</li>"; 
       $("#error_modal").html(""); 
       $("#error_modal").html(strErrors + "</ul>"); 
      } 
     }); 

     form.find('input[name^="kit_name_"]').each(function() { 
      $(this).rules("add", { 
       required: true, 
       messages: { 
        required: "Please enter a name." 
       } 
      }) 
     }); 

     form.find('input[name^="kit_desc_"]').each(function() { 
      $(this).rules("add", { 
       required: true, 
       messages: { 
        required: "Please enter a description." 
       } 
      }); 
     }); 

     form.find('input[name^="kit_qty_"]').each(function() { 
      $(this).rules("add", { 
       required: true, 
       digits: true, 
       messages: { 
        required: "Please enter a quantity." 
       } 
      }); 
     }); 

     if (! form.valid()) { 
      $("#error_modal").dialog().siblings(".ui-dialog-titlebar").remove(); 
      strErrors = ""; 
     } else { 
      form.submit(); 
     } 
    }; 
+0

每次调用'errorPlacement'函数时,都会将当前错误附加到'strErrors'。没有任何东西能够从中去除旧的错误,所以它只是增长和增长。 – Barmar

+0

在jqueryvalidation.org网站上查看此示例:http://jqueryvalidation.org/files/demo/errorcontainer-demo.html – Barmar

回答

1

你的问题是由执行errorPlacement引起...

errorPlacement: function(error, element) { 
    console.log(error); 
    strErrors += "<li>" + error[0].innerHTML + "</li>"; 
    $("#error_modal").html(""); 
    $("#error_modal").html(strErrors + "</ul>"); 
} 

默认情况下,该插件会在网页错误消息元素,并把它按任何errorPlacement功能到位。然后,无论何时错误更改或清除,插件都会自动更新错误消息元素的内容并切换它。您的代码不断创建新消息,并且该插件找不到要更新或切换的错误消息元素。

换句话说,errorPlacement仅用于为每个输入元素一次放置一条错误消息。你试图强制它完全变成别的东西。

你想在你的模态中的错误摘要?如果是这样,那么你需要参考文档并使用the showErrors option,这是为创建自定义错误摘要而设计的。