2

我的应用程序中有一个表单,我正在使用 jQuery 表单验证插件进行验证。规则之一是远程类型,以验证用户名不存在。我已经能够覆盖 onkeyup 事件,因此规则不会针对我输入的每个字母发送到服务器。我完成它的方式如下:

var validator = $("#frmSite").validate({
  onkeyup: function(element) {
    var element_name = jQuery(element).attr('name');
    if (this.settings.rules[element_name] != undefined) {
      if (this.settings.rules[element_name].onkeyup !== false) {
        jQuery.validator.defaults.onkeyup.apply(this, arguments);
      }
    }
  },
  rules: {
    <%=txtUsername.UniqueID%>: {
      onkeyup: false,
      required: true,
      minlength: 6,              
      remote: function () {
        var params = {
          userName: userNameTextbox.val()
        };
        return {
          type: "POST",
          url: "services/security.asmx/UserNotExists",
          data: JSON.stringify(params),
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          dataFilter: function (data) {
            var msg = eval("(" + data + ")");
            if (msg.hasOwnProperty("d"))
              return JSON.stringify(msg.d);
            else
              return msg;
          },
          error: function (jqXHR, textStatus, errorThrown) {
            alert(jqXHR.responseText);
          }
        };
      }
    }
  }
});

我遇到的问题是,现在远程规则是在onfocusout事件上触发的,每当我点击页面中的其他内容(例如,注销按钮)时,规则就会触发。我已经添加了onsubmit: false,作为validate函数选项的一部分和一个处理提交按钮的单击事件的函数,但即使这样,规则也会继续在onfocusout. 为了控制这一点,我添加了一个类似于我为 设置的功能,onkeyup因此规则不会在任何一个上触发onfocusout,但是用户获得验证消息的唯一时刻是在单击提交按钮之后。但是,我希望能够尽快将错误通知用户(即,一旦他完成输入用户名)。有没有办法执行以下任何或所有操作:

  1. 要为 onkeyup 添加延迟,以便在用户停止输入用户名几秒钟后触发规则?这应该只影响用户名文本框,因为我不希望延迟影响表单中的其他输入。

1a。如果以上是可能的,可以设置一种只影响remote规则的方式吗?因此,在正常键入期间会触发requiredmaxlength验证,但只有remote一个是在用户停止输入几秒钟后?

  1. 使onkeyup事件仅针对requiredandmaxlength规则触发,而不针对 the remoteone?所以remote规则只有在用户点击提交时才会触发,而其他两个是正常触发的keyup

如果还有其他可能的出路,请提出建议。

谢谢。

4

0 回答 0