リモート検証を使用して、電子メールアドレスがデータベースにすでに存在するかどうかを確認するフォームがあります。ただし、このフォームでは、ユーザーは複数の異なる「グループ」から選択でき、各グループには独自の電子メールアドレスのセットがあります(したがって、同じ電子メールが各グループに1回存在する可能性があります)。
グループの選択はフォームのドロップダウンであり、電子メールアドレスはリモート検証の入力フィールドです。いくつか問題があります。まず、リモートルールを次のように設定しました。
remote: {
url: 'remote_script.php',
data: { group_id: $('select.group_id').val() }
}
ただし、これにより、group_idパラメーターがselectの最初の値に静的に設定されているようです。つまり、selectを変更してから、リモート検証を再度トリガーしても、group_idパラメーターは変更されません。
まず、フォームのselectの値に応じて、このパラメーターを動的にするにはどうすればよいですか?
次に、電子メールアドレスフィールドでリモート検証を手動でトリガーするにはどうすればよいですか? group_id selectが変更された場合、(フィールドの値を変更せずに)電子メールアドレスフィールドでリモート検証を再トリガーしたいと思います。使ってみました
$(selector).validate().element('.email_addr')
ただし、これは標準の検証(必須、電子メール)のみをトリガーし、リモート呼び出しはトリガーしないようです。
私の質問の2番目の部分の解決策を見つけました:
$(".email_addr").removeData("previousValue");
リモートリクエストのキャッシュを削除し、.element()を使用してリモートリクエストを再度トリガーできるようにします。
したがって、私のコードは次のとおりです。
$("select.group_id").change(function() {
$(".email_addr").removeData("previousValue"); //clear cache when changing group
$("#customer_form").data('validator').element('.email_addr'); //retrigger remote call
//my validator is stored in .data() on the form
});
解決策はここで見つかりました: 解決策
私の質問の最初の部分は、もともと@JefferyToによって回答されました
実行する必要があるのは、パラメーターの値を単なる値ではなく関数に変更することだけです。ジェフリーの例は、将来のグーグルのために以下にコピーされています。
remote: {
url: 'remote_script.php',
data: {
group_id: function () {
return $('select.group_id').val();
}
}
}
2番目の例 リモートの場合、関数(検証中に評価)をデータに使用できるように見えるため、
_remote: {
url: 'remote_script.php',
data: {
group_id: function () {
return $('select.group_id').val();
}
}
}
_
動作するはずです。
2番目の質問では、検証ルールをvalidate()
に渡してみましたか?