【问题标题】:JQuery Validation Plugin EqualToJQuery 验证插件 EqualTo
【发布时间】:2012-10-21 21:30:21
【问题描述】:

所以这是我的问题的工作演示:bin。首先单击要查看的内容的按钮。接下来,导航到第二个选项卡,密码。这就是问题所在。验证插件中的 EqualTo 调用未正确返回。即使New PasswordVerify Password 正确,equalTo 也会返回 false。我不明白为什么,希望有人能弄清楚。

注意事项:
* 我将插件初始化放在点击回调内的 if 语句中,因为在所有这些之外时滑块显示非常奇怪。这与 hide 事件搞砸了定位有关。所以我只是把它放在回调中,并确保它只初始化一次。

【问题讨论】:

  • equalTo 中的这个选择器毫无意义.coda-slider-wrapper .coda-nav .current #new_password ID 必须是唯一的,只需使用选择器的 ID。更快,更不容易出现编码错误
  • @charlietfl 你到底是什么意思,你是说只做#new_password 因为如果是这样,那么我已经尝试过了,但它不起作用
  • yes... 更简单、更高效。不代表能解决问题。我还不太了解演示...不清楚链接是关于什么的,也看不到表单字段
  • @charlietfl 演示只是向您展示,无论如何,验证总是返回 false 用于比较 New Password 字段和 Verify Password 字段。我发现 jquery 只是无法找到 New Password 字段。这是更新的demo。在这里,如果您在New Password 字段中输入内容并点击提交,它应该会提醒您该框的值。但它现在返回一个空白或undefined,因为它找不到它。
  • 需要帮助..将其缩小为最简单的格式,没有滑块或额外的方法。大多数时候标签代码失败,我看不到表单。也不确定什么是有效的密码格式。令人沮丧

标签: jquery html validation jquery-validate


【解决方案1】:

您遇到的问题是 codaSlider 和 jQuery Validate 之间的一些交互。如果您取出 codaSlider 脚本和代码,您的验证脚本就可以工作(如果您将 equalTo 更改为 equalTo: '#new_password')。

这是您的 bin 已编辑为在没有 codaSlider 的情况下工作:http://jsbin.com/welcome/37927/edit

编辑:我查看了 codaSlider 的源代码,在它的事件处理的某个深处,它不能很好地处理滑块元素内发生的点击。我认为它覆盖了 jQuery Validate 处理提交点击的方式,可能还有其他事情。如果您将选项 continuous:false 添加到您的 codaSlider,我认为这将修复此交互,而不会破坏您使用的 codaSlider。这是实际使用的版本:http://jsbin.com/welcome/37989/edit

【讨论】:

  • 所以你把尾声滑块拿出来了?我完全理解验证插件在正常条件下工作,我将它用于我的整个网站。发布该问题是为了询问如何使其在特定条件下工作,例如在 coda 内部实施。这个答案完全没有帮助
  • 很公平 - 我承认我没有在链接之外阅读您的问题 :) 我会再看一下!
  • 根本问题不是与 codaSlider 的冲突,而是两个不同的 submit 处理程序之间的冲突……一个内置在 validate() 中,另一个由 OP 添加。
  • @Sparky672 - 我不同意自定义提交处理程序导致任何问题。当然,OP 应该在 Validate 中使用 submitHandlerinvalidHandler 来处理表单,但在这种情况下,它确实不会改变 validate 正常工作的结果。
  • 再看一遍,他在submit() 处理程序中初始化了validate() 插件。这是非常错误的。 validate() 需要在页面加载时初始化一次,而不是每次点击按钮。如果页面加载时验证插件未初始化,则第一次点击不会进行验证。
【解决方案2】:

根源(一个问题)是当validate() 插件已经包含它自己的submitHandler: 函数时,您正在添加一个独立的submit 处理函数。 编辑: 根本问题是validate() 插件在您点击submit 之前甚至都没有初始化。

document.ready 中初始化validate() 并让validate() 插件按预期处理submit 事件...

$("#change_Pass").validate({
    onkeyup: false,
    errorClass: "password_messages",
    debug: true, // remove this for production code
    rules: {
        change_password: {
            required: true
        },
        new_password: {
            required: true,
            passw: true
        },
        verify_password: {
            required: true,
            equalTo: ".coda-slider-wrapper .coda-nav .current #new_password"
        }
    },
    messages: {
        change_password: {
            required: "Please enter your current password"
        },
        new_password: {
            required: "Please enter a new password"
        },
        verify_password: {
            required: "Please verify your new password",
            equalTo: "Your passwords did not match"
        }
    },
    submitHandler: function(form) {
        alert($('#new_password').val());
        if ($(form).valid()) {
            alert("Success");
        }
        return false;
    }
});

去除了无关代码的 jsFiddle Demo:

http://jsfiddle.net/9SYr5/3/


编辑:

此外,validate() 插件需要在页面加载时初始化一次,而不是每次单击提交按钮时。

不正确地初始化插件似乎是一件很流行的事情;请参阅这些 SO 链接,了解由这种不当做法引起的所有各种问题。所有这些 SO 问题都有一个共同点,validate() 通过将其放置在 submit()click() 处理程序中而未正确初始化。

1) https://stackoverflow.com/a/9936025/594235(需要多次提交点击)

由于您将 .validate() 包含在 .submit() 中,因此验证 在您点击提交之前,函数甚至不会加载。既然不是 点击提交时已经加载,不会进行验证。然后 当您第二次点击提交时,该功能现在已加载,因此 似乎工作正常。

当您将.validate() 包含在document.ready 中时,验证 DOM 加载完成后,插件会立即加载。所以, 它已准备就绪,等待您与表单交互 在第一次提交时表现正确。

更多...

2) https://stackoverflow.com/a/11068130/594235(在点击处理程序内部时不会验证)

3) https://stackoverflow.com/a/10825498/594235(第二次提交时无效)

4) https://stackoverflow.com/a/10609871/594235(验证不会再次运行)

5) https://stackoverflow.com/a/10987058/594235(在提交时初始化新表单不起作用)

6) https://stackoverflow.com/a/9460920/594235(忽略验证)

【讨论】:

  • 你误读了这个问题(和我一样!) - codaSlider 和 validate 之间的交互是 100% 的问题。 OP 知道他们是分开工作的,甚至在问题中也这么说。
  • @Ryley,也许是这样,但他试图做的事情和做事的方式似乎分别非常复杂和冗长。
  • @Ryley, see my answer 并阅读底部的部分。
  • 我不确定你在哪里找到这个 - 他只是在显示表单时创建验证(诚然,如果你要重新单击原始按钮,它会重新创建)。没有理由不按照您描述的方式进行操作,但这仍然不能解决他遇到的问题。
  • @Ryley,是的,整个事情的实现仍然非常奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
相关资源
最近更新 更多