2010-09-02 215 views
4

我有一个简单的HTML表单:为什么JQuery valid()方法总是返回True?

<form id="frmNewCategory"> 
    <span>New Category Name:</span> 
    <input type="text" id="txtNewCategoryName"> 
    <label>Amount:</label> 
    <input type="text" id="txtNewCategoryAmount"> 
    <br> 
    <input type="submit" value="Create" class="importantButton button" id="btnNewCategory"> 
    <input type="button" value="Cancel" class="button" id="btnCancelNewCategory"> 
</form> 

而使用位的jQuery驱动的JavaScript的被点击btnNewCategory当火灾validation plugin

function onNewCategoryClick(event) 
{ 

    $("#frmNewCategory").validate(
     { 
      rules: 
      { 
       txtNewCategoryName : { required: true }, 
       txtNewCategoryAmount : { required: true, number: true } 
      }, 
      messages: 
      { 
       txtNewCategoryName : { required: "*" }, 
       txtNewCategoryAmount: { required: "*", number: "Invalid Amount." } 
      } 
     }); 


    if (!$("#frmNewCategory").valid()) 
     return; 

    event.preventDefault(); 
    var cmd = cmdFactory.createUndoableNewCategoryCommand($(this)); 
    cmdBus.handleCommand(cmd); 
} 

以上所述的方法被认为验证frmNewCategory。问题是,即使表单有无效值或没有值,.valid()方法仍然返回True。

任何想法?我究竟做错了什么?

回答

14

规则采取的形式输入 “姓名” 而不是 “IDS”:

 <input type="text" name="txtNewCategoryName" /> 
     <input type="text" name="txtNewCategoryAmount" /> 
+1

谢谢!这是一个棘手的问题,因为虽然valid()方法返回true,但调用.validate()。元素(“#selector”)方法将返回false。 – 2012-10-22 18:20:11

+1

在阅读了两篇教程后,我已经浪费了6个小时。我将花时间编写自己的教程,用大词汇来强调这个重要问题。 – Ishmael 2012-12-10 19:59:38

7

相反的:

<input type="text" id="txtNewCategoryName"> 
<input type="text" id="txtNewCategoryAmount"> 

用途:

<input type="text" name="txtNewCategoryName"> 
<input type="text" name="txtNewCategoryAmount"> 
1

这种模式之前,为我工作:

$(".required").filter(function() { return $(this).val() == ""; }).addClass("invalidInput"); 

if (this.formWrp.valid() && this.formWrp.find(".invalidInput").length == 0) 
    return true; 

这样做后,似乎激活验证。