JQuery验证插件EqualTo

JQuery验证插件EqualTo,jquery,html,validation,jquery-validate,Jquery,Html,Validation,Jquery Validate,下面是我的问题的一个工作演示:。首先单击按钮以查看内容。接下来,导航到第二个选项卡“密码”。这就是问题所在。验证插件中的EqualTo调用未正确返回。即使新密码和验证密码正确,equalTo也会返回false。我不明白为什么,希望有人能弄明白 注: *我将插件初始化放在if语句中,if语句在click回调中,因为滑块在所有这些语句之外时显示得非常奇怪。这与隐藏事件搞砸了定位有关。所以我只是把它放在回调中,并确保它只初始化一次 您遇到的问题是codaSlider和jqueryvalidate之间的

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

注:

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

您遇到的问题是codaSlider和jqueryvalidate之间的一些交互。如果取出codaSlider脚本和代码,验证脚本就会工作(如果将equalTo更改为
equalTo:“#新密码”

以下是您的bin编辑后可以在没有codaSlider的情况下工作:

编辑:我查看了codaSlider的源代码,在其事件处理的深处,它处理滑块元素中发生的点击的能力很差。我认为它覆盖了jqueryvalidate处理提交点击的方式,以及其他可能的事情。如果您将选项
continuous:false
添加到您的codaSlider,我认为这将修复此交互,而不会破坏您使用的codaSlider。这个版本正在运行:

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

文档中初始化
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;
    }
});
去除无关代码的JSFIDLE演示:


编辑:

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

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

1) (需要多次单击提交)

由于您在
.submit()
中包含了
.validate()
,因此验证 直到您点击submit,函数才会加载。既然不是 点击提交时已加载,不会进行验证。然后 当您第二次点击submit时,函数现在已加载,因此 看起来工作正常

document.ready
中包含
.validate()
时,验证 插件在DOM加载完成后立即加载。所以,, 它已经准备好了,等待你与你的表单和它交互 在第一次提交时行为正确

更多

2) (在单击处理程序内部时不会验证)

3) (不适用于第二次提交)

4) (验证将不会再次运行)

5) (提交时初始化新表单无效)


6) (验证被忽略)

此选择器在
equalTo
中是无意义的
.coda slider wrapper.coda nav.current#new_password
ID必须是唯一的,只需使用选择器的ID即可。编码速度更快,错误更少mistake@charlietfl你的确切意思是什么,你是说只要做
#新密码
,因为如果是这样的话,那么我已经试过了,但它不起作用是的。。。更简单、更高效。但这并不意味着它能解决问题。我还没有真正了解演示…不清楚链接是关于什么的,也看不到表单fields@charlietfl演示只是告诉您,无论发生什么情况,
newpassword
字段和
verifypassword
字段之间的比较,验证总是返回false。我发现jquery无法找到
新密码
字段。这里有一个更新的。在这里,如果您在
新密码
字段中键入某个内容并点击提交,它会用框的值提醒您。但是它现在返回一个空白或未定义的
,因为它找不到它。需要帮助..将其缩小到最简单的格式,没有滑块或额外的方法。大多数时候标签代码失败,我看不到表单。也不确定什么是有效的密码格式。沮丧所以你把尾波滑出了?我完全理解验证插件在正常情况下工作,我将其用于我的整个网站。发布这个问题的目的是询问如何使它在特定条件下工作,例如在coda内部实现。这个答案是完全没有帮助的-我承认我没有读你的问题远远超过链接:)我会再看一看!根本问题不是与codaSlider的冲突,而是两个不同的
submit
处理程序之间的冲突。。。一个内置于
validate()
中,另一个由OP.@Sparky672添加-我不同意自定义提交处理程序会导致任何问题。当然,OP应该在Validate中使用
submitHandler
invalidHandler
来处理表单,但它实际上不会改变wrt Validate在这种情况下正常工作的结果。再次查看,他从
submit()
处理程序中初始化
Validate()
插件。这是非常错误的<代码>验证()
在页面加载时需要初始化一次,而不是每次按下按钮时