アプリケーションに、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 つは通常どおりにトリガーされます。requiredmaxlengthremoteremotekeyup
他に可能な方法があれば、提案してください。
ありがとう。