標準の jquery 検証プラグインを使用して条件付きリモート呼び出しをセットアップしようとしています。
問題は、validate メソッドで name.val() を渡すと、ページの読み込み時に入力テキスト フィールドに設定された名前が常に表示されることです。テキスト ボックスの名前ではありません。
name.val() を「Test」に置き換えると、スクリプトは問題なく動作します。コンソールに構文エラーやエラーはありません。get_exists_rule(name.val()) への呼び出しも削除し、単純な required: true に置き換えましたが、問題ありません。このセットアップは、同じ命名スキームを持つ他のフォームで機能していますが、リモート呼び出しはありません。
また、get_exists_rule に警告メッセージを投げましたが、ページが読み込まれたときに 1 回しか実行されないため、面白いビジネスが行われている可能性があります。
私はこれに7時間近く立ち往生しており、関連するすべてのSO投稿と、考えられるすべての場所を調べましたが、機能する解決策が見つかりませんでした.
コーヒースクリプトは次のとおりです。
name = $("#category_name")
get_exists_rule = (category_name) ->
if original_name is category_name
required: true
maxlength: 64
else
remote: { url: "/dashboard/categories/exists/" + title_to_slug(category_name), type: "POST", async: false }
category_form.validate
errorElement:
"span"
rules:
"category[name]":
get_exists_rule(name.val())
これがJavaScriptです:
var get_exists_rule, name;
name = $("#category_name");
get_exists_rule = function(category_name) {
if (original_name === category_name) {
return {
required: true,
maxlength: 64
};
} else {
return {
remote: {
url: "/dashboard/categories/exists/" + title_to_slug(category_name),
type: "POST",
async: false
}
};
}
};
category_form.validate({
errorElement: "span",
rules: {
"category[name]": get_exists_rule(name.val())
}
});