Foundation 6 Abide を使用して、パターンに対してユーザー名フィールドをチェックし、ユーザー名が既に登録されているかどうかを確認するためにサーバーにアクセスする必要があるカスタム バリデーターを作成しました。カスタムバリデーターが実行されると、最初に正規表現パターンに対してユーザー名をテストします。それが成功した場合は、サーバーへの ajax 呼び出しを実行して、ユーザー名が存在するかどうかを確認します。JavaScript は待機しないため、カスタム バリデータ関数は「true」を返し、すべて問題がないことを示します。ユーザー名が見つかった場合、ajax 呼び出しが完了すると、フィールドで「addErrorClasses」が呼び出されます。これは完全に機能しますが、以前はバリデーターが ajax を待ちたくなかったので "true" を返していたので、"false" を返す方法がないことを懸念しています。
質問: addErrorClasses 関数を呼び出すと、フィールドが無効としてマークされ、フォームが無効な状態になりますか?
Foundation.Abide.defaults.validators.validate_username =
function($el,required,parent) {
// parameter 1 is jQuery selector
if (!required) return true;
let val = $el.val();
// Step 1 - check that it meets the pattern
if (!val.length)
return true;
let valid = new RegExp(username_pattern).test(val);
if (!valid)
return false;
// Step 2 - check that the username is available
$.ajax({
url: "http://localhost:3000/users/"+val,
}).done(function(data) {
$('#demo-form').foundation('addErrorClasses',$el);
console.log(data);
}).fail(function() {
// do nothing for now
});
return true;
};