アプリケーションに、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
が、これを使用すると、ユーザーが検証メッセージを受け取るのは送信ボタンをクリックした後だけです。ただし、できるだけ早く (つまり、ユーザー名の入力が終了したらすぐに) エラーについてユーザーに通知できるようにしたいと考えています。次のいずれかまたはすべてを実行する方法はありますか。
- onkeyup の遅延を追加して、ユーザーがユーザー名の入力を停止してから数秒後にルールがトリガーされるようにするには? 遅延がフォームの他の入力に影響を与えたくないので、これはユーザー名テキストボックスにのみ影響する方法である必要があります。
1a. 上記が可能であれば、remote
ルールのみに影響するような設定はできますか?required
とのmaxlength
検証は通常のキーアップ中にトリガーされremote
ますが、ユーザーが入力を停止した数秒後には 1 つだけですか?
- およびルール
onkeyup
に対してのみイベントをトリガーし、1 つに対してはトリガーしないようにするには? そのため、ルールはユーザーが送信をクリックしたときにのみトリガーされますが、他の 2 つは通常どおりにトリガーされます。required
maxlength
remote
remote
keyup
他に可能な方法があれば、提案してください。
ありがとう。