2

アプリケーションに、jQuery フォーム検証プラグインで検証しているフォームがあります。ルールの 1 つは、ユーザー名がまだ存在しないことを検証するためのリモート タイプです。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ルールのみに影響するような設定はできますか?requiredとのmaxlength検証は通常のキーアップ中にトリガーされremoteますが、ユーザーが入力を停止した数秒後には 1 つだけですか?

  1. およびルールonkeyupに対してのみイベントをトリガーし、1 つに対してはトリガーしないようにするには? そのため、ルールはユーザーが送信をクリックしたときにのみトリガーされますが、他の 2 つは通常どおりにトリガーされます。requiredmaxlengthremoteremotekeyup

他に可能な方法があれば、提案してください。

ありがとう。

4

0 に答える 0