これには目立たない検証は行われていないと思いますが(目的は、キーを押すたびに入力を検証することです-ユーザーフレンドリーです)、このアプローチには回避策があります
。//this is my code
あなたjquery.validate.js
とそれを縮小するか、新しい.js
ファイルを作成して以下のコードを追加することができます。特定の(特定のルール、つまりリモートではなく)特定
のものを取り除きたい場合は、jqueryサイトで見つけることができる特定の簡単な方法があります。このコードは、イベントのルール
のみを無視し、他のルール (つまり、通常はオンのイベント) を検証します。onkeyup
input
remote
keyup
required
keyup
focuseout
(function ($) {
jQuery.validator.setDefaults({
onkeyup: function (element) {
$(element).data('firedON', 'keyup') //this is my code
if (element.name in this.submitted || element == this.lastElement) {
this.element(element);
}
}
});
$.validator.methods.remote = function (value, element, param) {
if ($(element).data('firedON') == 'keyup') {
$(element).data('firedON') = '';
return "dependency-mismatch"; //this 'if' is my code(thats it)
}
if (this.optional(element))
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name])
this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param == "string" && { url: param} || param;
if (previous.old !== value) {
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data[element.name] = value;
$.ajax($.extend(true, {
url: param,
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function (response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
if (valid) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = (previous.message = response || validator.defaultMessage(element, "remote"));
errors[element.name] = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return "pending";
} else if (this.pending[element.name]) {
return "pending";
}
return previous.valid;
}
} (jQuery));
更新
上記のコードは確かに機能しますが、機能全体を持ち込まないことでコードをよりきれいにしようとしていることに注意してください。
var remote = $.validator.methods.remote;
$.validator.methods.remote = function(a,b,c){
if ($(element).data('firedON') == 'keyup') return "dependency-mismatch";
return remote(a,b,c);
}
しかし、古い関数をローカルremote
変数に保存した後、 ' this
' が別の場所を参照するため、このコードを修正できなかったthis
ため、上記のコードを使用して失敗しました。