rails jquery.validate.js $ .validator.methods [method]未定义

时间:2013-04-29 14:32:59

标签: jquery ruby-on-rails jquery-validate

我有一个使用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 )

当我创建一个新用户时,一切正常。任何想法出了什么问题?

谢谢!!!

1 个答案:

答案 0 :(得分:0)

在搜索了一下之后,我得出的结论是,只有在我触发规则之前提交表单时才会出现此问题:

  • 如果我创建新用户并键入重复的电子邮件地址,则onblur事件会触发我的规则。显示的消息在我输入唯一的电子邮件地址之前我将无法提交表单
  • 但是,如果我编辑用户并修改另一个字段。由于我没有更改电子邮件,因此未在电子邮件字段中触发此onblur事件。单击提交按钮时会触发它。这是发生错误的时候。

我作为解决问题的黑客所做的是:

$("form[data-validate=true]").validate({

    onsubmit: false

});

这样,在提交时禁用验证。这不是很干净,可能会引起一些问题,但这就是我现在所拥有的......