防止在';提交处理程序';在jQuery验证插件中
我有一个表单,我正在使用jQuery验证插件进行验证。 我还有一个自定义的密码强度验证脚本 我已经将提交处理程序设置为调用密码验证函数(validatePwdValid),如果密码有效,我希望表单提交,如果密码无效,则不提交。我已经在Chrome上运行了,但在Firefox上没有。因为它在Chrome中工作,我认为其中一个函数的参数列表中的“事件”导致了这个问题,但即使有了它,我也无法让它在FireFox中工作防止在';提交处理程序';在jQuery验证插件中,jquery,firefox,jquery-validate,Jquery,Firefox,Jquery Validate,我有一个表单,我正在使用jQuery验证插件进行验证。 我还有一个自定义的密码强度验证脚本 我已经将提交处理程序设置为调用密码验证函数(validatePwdValid),如果密码有效,我希望表单提交,如果密码无效,则不提交。我已经在Chrome上运行了,但在Firefox上没有。因为它在Chrome中工作,我认为其中一个函数的参数列表中的“事件”导致了这个问题,但即使有了它,我也无法让它在FireFox中工作 function validatePwdValid() { if (pwdV
function validatePwdValid() {
if (pwdValid == true) {
form.submit();
} else {
e.preventDefault();
$('.form-validate-password .alert-error').removeClass('hide');
}
};
$(".form-validate-password").validate({
submitHandler: function(e) {
//this runs when the form validated successfully
validatePwdValid();
}
});
有什么想法吗
添加更多代码以使其更清晰(但讽刺的是更复杂)
这里有一把小提琴:
如果您键入少于8个字符的密码并提交,您将在Chrome中收到一条错误消息,但在Firefox中不会。Firefox仍将提交表单。您的脚本有一些问题 一,。
validatePwdValid()
是在submitHandler
回调之外定义的。函数具有“作用域”,它本质上决定了它们可以访问哪些变量。函数的范围由函数的定义位置决定(禁止使用称为.call()
…的特殊实用方法,但这对于快速回答来说太多了)
submitHandler()
回调中的scope
与定义了validatePwdValid()
的作用域不同。因此,validatePwdValid()
不知道“e”是什么。而且,您没有在任何地方定义pwdValid。。。它是未定义的<代码>未定义==true始终计算为false。。。因此永远不会调用form.submit()。我已经有一段时间没有使用validate插件了,但假设在提交表单时运行验证,e.preventDefault()将停止表单提交。因此,只需将“e”传递给将停止提交的函数
下面是一个SAN验证插件的快速示例:
function validatePwdValid(e) {
//define pwdValid somewhere
var pwdValid;
if (!pwdValid) {
e.preventDefault();
alert('event stopped');
}
//if pwdValid submits
};
$("#form").on('submit', function(e){
//validate form
validatePwdValid(e);
});
编辑:
下面是更新后的示例。Firefox没有全局事件对象,因此必须传入
// Function to check that pwdValid is true, and if so submit the form, otherwise don't.
function validatePwdValid(form, event) {
if (pwdValid == true) {
form.submit();
} else {
alert('prevent submit');
event.preventDefault();
$('.form-validate-password .alert-error').removeClass('hide');
}
}
// When the user enters the password, run validatePwdStrength
pwdInput.bind('change keyup input', validatePwdStrength);
$(".form-validate-password").validate({
submitHandler: function(form, event) {
//this runs when the form validated successfully
validatePwdValid(form, event);
}
});
测试在Firefox中工作。
将e传递给validatePwdValid函数我尝试过,但没有成功…编辑了我的答案,检查出来是的,我感觉代码有一段时间不正确。Chrome理解这一点很奇怪吗?这些函数位于另一个“容器”函数中,这有区别吗?pwdValid是在这里看到的函数外部定义的,但在父函数内部。为了减少混乱,我错过了这一点,抱歉。我已经从脚本中添加了周围的代码以将其放到上下文中。最初我省略了它,试图让事情更清楚。在过去的几个小时里,我一直在研究,试图解决它,但基本上我是我的深度和急需帮助!你能复习较长的代码并把我踢向正确的方向吗?我没看到你已经做了一把小提琴。。。设置应该类似
// Function to check that pwdValid is true, and if so submit the form, otherwise don't.
function validatePwdValid(form, event) {
if (pwdValid == true) {
form.submit();
} else {
alert('prevent submit');
event.preventDefault();
$('.form-validate-password .alert-error').removeClass('hide');
}
}
// When the user enters the password, run validatePwdStrength
pwdInput.bind('change keyup input', validatePwdStrength);
$(".form-validate-password").validate({
submitHandler: function(form, event) {
//this runs when the form validated successfully
validatePwdValid(form, event);
}
});