【问题标题】:.valid() only validates first input with jQuery Validation plugin.valid() 仅使用 jQuery Validation 插件验证第一个输入
【发布时间】:2010-08-04 15:55:54
【问题描述】:

我很难让 jQuery Validation 插件按我的意愿工作。

我拥有的是一个包含几个必需输入的表单,规则如下所示:

$("#makeEvent").validate({
    onfocusout: false,
    rules: {
        name: {
            required: true,
            minLength: 2,
            maxLength: 100
        },
        host: {
            required: true,
            minLength: 2,
            maxLength: 100
        },
        startDate: {
            required: true,
            date: true
        },
        endDate: {
            required: true,
            date: true
        },
        desc: {
            required: true,
            minLength: 10,
            maxLength: 255
        },
        webpage: {
            required: false,
            url: true
        },
        email: {
            required: true,
            email: true
        },
    }
});

现在我有一个自定义的 .click() 调用,我想在其中验证表单,然后在允许用户发送表单之前为用户显示预览。请看下面的函数:

$('#submitPreview').click(function() {
    if($("#makeEvent").valid() === false) {
        //What to do if validation fails
    } else if($("#makeEvent").valid() === true) {
        //Show the preview and let the user either make changes or submit the final result
    }
});

但是发生的情况是该函数仅验证第一个输入(名称),甚至验证不正确(规则要求至少 2 个字符,但仍然只输入 1 个字符进行验证。如果没有字符,则仅返回 false完全添加)。

也许我的方法不是最好的,所以我愿意接受任何建议。如果你想看看杂乱无章的源代码,你可以在这里看到这个函数:http://event.gusthlm.se/make.php

【问题讨论】:

    标签: jquery jquery-validate


    【解决方案1】:

    我可以看到的两个问题是,您没有在输入字段中使用name 属性,并且您使用name 作为ID 之一(在提交表单时对IE 造成了各种痛苦)。

    我建议将 name 属性添加到您的 input、select 和 textarea 元素中,并将“name”更改为“thename”之类的内容:

    <label for="thename">Börjar</label>
    <input type="text" name="thename" id="thename"/>
    

    【讨论】:

    • 你猜怎么着?这解决了这个问题。我永远猜不到...谢谢!
    • 我知道这是旧的,但我有一个问题,我不能有名称字段。我正在使用 Stripe 验证信用卡并防止信用卡信息访问我们的服务器,我们必须排除 name 属性。我也很好奇为什么 name 属性对客户端验证有任何影响?
    • @computrius,因为 jQuery Validate 插件需要 name 属性...这是开发人员决定插件应该跟踪输入的方式。
    • @computrius,“这是插件跟踪输入的方式”来自开发者在他的 Github 网站上的 cmets。你的不接受并不能改变事实。如果你想确切地知道为什么开发者决定选择name而不是其他东西,你必须问他......但我的猜测是因为它更有可能是一个表单输入元素将包含name,而不是用于唯一标识的任何其他属性。
    • 即使 ID 和名称相同,它也应该可以工作。但是,最好的做法是让名称和 ID 不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多