【问题标题】:jquery validation - waiting for remote check to completejquery 验证 - 等待远程检查完成
【发布时间】:2011-06-24 12:34:05
【问题描述】:

当我调用$("form").valid() 时,我连接了一个远程验证检查(一切正常),但是如果所有其他字段都有效,则表单通过验证,因为远程检查没有返回“足够快”的响应。

有没有办法强制 jquery 验证等待任何远程检查完成或挂钩远程检查调用的完成事件?

我目前正在使用jQuery验证框架中内置的远程验证器http://docs.jquery.com/Plugins/Validation/Methods/remote

【问题讨论】:

  • 那么没有办法通过jquery验证框架自动实现吗?

标签: validation jquery


【解决方案1】:

一种方法是引入一个变量,当远程调用返回时将设置为 true

var remote_complete = false;

$.ajax({
  url: "test.html",
  success: function(){
    remote_complete = true;
  }
});

while (remote_complete == false)
  {
  // loop until  remote_complete = true;
  }

另一种方法是在远程验证完成后验证您的表单

 $.ajax({
      url: "test.html",
      success: function(){
        validate_form();
      }
    });

【讨论】:

  • 小心 while 循环 - 它可能导致浏览器无响应。
  • 我更喜欢后者。如果你真的想采用前一种方法,至少使用setInterval
  • 而没有 setinterval - 坏主意
  • @Andrew 我查了 setInterval,但我不明白它是如何应用在这里的。请发表您的想法。
  • 我添加了 2 个函数:validateForm 和 validateField 在这 2 个函数中我设置了标志,如果请求正在等待,在 stopRequest 中我触发事件 form-valid 或 field-valid(取决于标志)跨度>
【解决方案2】:

您可以添加一个自定义规则,并在该自定义规则中进行 ajax 调用。

请查看 SO 帖子 here 以创建自定义规则。

在该函数中进行 ajax 调用。

【讨论】:

    【解决方案3】:

    好吧,如果您正确设置了所有规则,那么这应该不是问题。请参阅此demo,其中正在远程验证电子邮件,并且在检查返回之前验证不会通过。

    你能发布一个突出你的问题的 jsfiddle 吗?

    【讨论】:

      【解决方案4】:

      http://gloryplus.com/index.php?route=product/product&path=82&product_id=173

      rules: {
            name: {
              minlength: 2,
              required: true
            },
            email: {
              required: true,
              email: true
            },
            subject: {
              minlength: 2,
              required: true
            },
            message: {
              minlength: 2,
              required: true
            }
          },
          highlight: function(label) {
              $(label).closest('.control-group').addClass('error');
          },
          success: function(label) {
              label
                  .text('OK!').addClass('valid')
                  .closest('.control-group').addClass('success');
          }
      

      【讨论】:

        猜你喜欢
        • 2016-05-12
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多