验证完成后如何禁用验证器?



我在注册表单中使用jquery验证器。 我想在将密码发送到服务器之前对其进行加密。 密码和确认密码都需要加密,这会导致验证器崩溃并在控制台中出现"太多调用堆叠"错误,大概是因为当我在提交之前更新表单中的值时,onchange 方法正在触发......

$.validator.setDefaults( {
submitHandler: function(e) {
$("#signupForm").submit(function(e){
e.preventDefault();
});
var hp = $('#password').val();
var hc = $('#passwordConfirm').val();
var hb = $('#heartbeat').val();
hp = CryptoJS.SHA384(hp);
hp = CryptoJS.SHA384(hp + hb);
hc = CryptoJS.SHA384(hc);
hc = CryptoJS.SHA384(hc + hb);
$('#password').val(hp);
$('#passwordConfirm').val(hc);
$('#signupForm').submit();
}
} );

如何在提交处理程序函数开始时禁用验证器?

控制台中的

>"太多调用无法堆叠"错误,可能是因为在提交之前更新表单中的值时触发了onchange方法。

嗯没有。submitHandler内不会触发验证,因为此时表单已被视为有效。 验证通过用户与表单的交互触发。 以编程方式更改表单值无法触发验证,除非您也以编程方式触发验证。

如何在提交处理程序函数开始时禁用验证器?

你没有。 您无需在submitHandler开始时禁用验证,因为此时验证已 100% 完成。submitHandler不会触发其他验证。

让我们分解一下...

submitHandler: function(e) {
$("#signupForm").submit(function(e){
e.preventDefault();
});
// your encryption code here
$('#signupForm').submit();
}
  1. 您不能将e传递到submitHandler并期望插件接受它作为表示"事件"的依据。 这方面没有事件。form是唯一接受的参数,它表示插件识别的表单对象。

    submitHandler: function(form) {
    
  2. e.preventDefault()submitHandler回调中完全没有意义,并且可能在这里什么都不做。 另见第1项。submitHandler回调函数已阻止提交操作的默认行为。

  3. $("#signupForm").submit导致您的循环... 表单是有效的,所以submitHandler触发,你告诉它再次提交,导致submitHandler再次被触发......等等。

  4. 最后一行$('#signupForm').submit()应为form.submit()

请参阅文档的这一部分,其中专门介绍了您创建的递归循环。

换句话说...

  • jQuery 验证插件通过自己的submitHandler函数阻止默认提交。

  • 然后,您将通过将其替换为您自己的自定义submitHandler函数来阻止 jQuery 验证插件的默认提交处理程序例程。

通过在submitHandler函数结束时调用form.submit()来恢复正常的插件流。 (或者,可以在此处将form.submit替换为 Ajax 提交。

整个事情应该这么简单...

submitHandler: function(form) { // <- note the "form" argument
// below replaces default submitHandler callback
// form is valid here - no validation is triggered
// your encryption code here
form.submit(); // now submit data (does not call submitHandler or new validation)
}

相关内容

  • 没有找到相关文章

最新更新