【发布时间】:2013-04-29 14:32:59
【问题描述】:
我有一个使用 jquery 的验证插件的表单。它过去可以正常工作,但在某些情况下却不行:
我编辑了一个现有用户。
此表单中有一个 id=user_email 的输入字段。
我添加了这条规则:
$("form[data-validate=true]").validate();
addFormRules();
function addFormRules() {
var form_id = $("form[data-validate=true]").attr("id");
if(typeof form_id != 'undefined') {
var resource_id = $("form[data-validate=true]").attr("id").match(/[\d]+$/);
//rules for edit and new
if ($("#user_email").length > 0) {
var url = "/users/check_email"
if( resource_id != null){ url = url + "?id=" + resource_id}
$("#user_email").rules("add", {
remote: {
url: url,
type: "post"
},
messages: {
remote: "There is already a user with this email address!"
}
});
}
}
}
此规则在服务器端触发此功能:
def check_email
@user = User.find_by_email(params[:user][:email])
unless params[:id].nil? or params[:id].blank?
@edited_user = User.find(params[:id])
check = (@user and @user.email != @edited_user.email) ? false : true
else
check = @user ? false : true
end
函数在执行时返回“true”。
在此之后,我在浏览器控制台中收到此错误消息并且一切都冻结了:
TypeError: $.validator.methods[method] is undefined
[Break On This Error]
...result = $.validator.methods[method].call( this, val, element, rule.parameters )
当我创建一个新用户时,一切正常。知道有什么问题吗?
谢谢!!!
【问题讨论】:
-
rules('add')方法只能在.validate()初始化插件之后的某个时间调用。 -
当然!就是这样。我编辑了问题以使其更清楚。
-
仔细观察,我认为您的逻辑是由内而外的。您在这里尝试实现的简单逻辑是什么?示例:在什么条件下使用
remote规则?只有当字段不为空时?该插件已经自动执行此操作。 -
远程触发 check_email 查找重复的方法。我认为插件不会自动执行此操作。
-
不,插件不会自动检查重复项。但是,当正确配置和初始化时,此插件会自动完全执行您定义的规则。您不需要编写自己的事件处理例程。
标签: jquery ruby-on-rails jquery-validate