jQuery验证:重新运行远程验证,而无需更改相关字段的值

Alt*_*ice 5 javascript jquery jquery-validate

我有一个像这样的远程验证器设置

remote: {
  type: "POST",
  url: "/some/url",
  data: {
    value: function() {
      return $("#field").val();
    },
    bypass: function() {
      if ($("input:radio[name=toggleBypass]:checked").val() == "yes"){
        return "yes";
      }
      return "no";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果bypass为“ yes”,则ajax始终返回true。

它适用于模糊和提交,但是如果我重设单选按钮的值然后提交,则不会重新验证。

例如,

  1. 将toggleBypass设置为“是”
  2. 将字段设置为无效值
  3. 运行$(“ form”)。validate()。element(“#field”)。由于旁路为“是”,因此可以通过。
  4. 将toggleBypass设置为“否”
  5. 运行$(“ form”)。validate()。element(“#field”)。它通过了,因为遥控器没有重新提交。

有什么想法可以使它正常工作吗?

Nik*_*nov 2

如果你查看 jquery.validate.js 中的第 897 行,你会看到一个优化:

if ( previous.old !== value ) {

如果字段的值未更改,则此行将阻止新的验证。由于您使用的是validate().element(),因此它只检查该字段,而不是整个表单,因此它不会检测toggleBypass 中的更改。

要么从 jquery.validate 源中删除此检查,要么检查整个表单,而不仅仅是该字段。