为什么JQuery valid()方法总是返回True?

时间:2010-09-02 04:43:57

标签: javascript jquery jquery-validate

我有一个简单的HTML表单:

<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>

使用点击btnNewCategory时触发的validation plugin的jQuery驱动JavaScript:

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。

有什么想法吗?我做错了什么?

3 个答案:

答案 0 :(得分:14)

规则采用输入“名称”而不是“ids”:

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

答案 1 :(得分:7)

而不是:

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

使用:

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

答案 2 :(得分:1)

此模式之前适用于我:

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

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

执行此操作后,似乎验证已激活。