我正在尝试使用标准 jquery 验证插件设置有条件的远程调用。
问题是当我在 validate 方法中传入 name.val() 时,它始终是页面加载时在输入文本字段中设置的名称。它永远不是文本框中的名称。
我将 name.val() 替换为“Test”,然后脚本完美运行。控制台中没有语法错误或任何错误。我还删除了对 get_exists_rule(name.val()) 的调用,并将其替换为一个简单的 required: true ,这很好。我有这个设置在具有相同命名方案的其他表单上工作,只是没有远程调用。
我还在 get_exists_rule 中抛出了一条警报消息,无论如何它只会在页面加载时执行一次,因此可能会发生一些有趣的事情。
我已经连续坚持了将近 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())
}
});