0

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

当我创建一个新用户时,一切正常。有什么想法吗?

谢谢!!!

4

1 回答 1

0

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

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

我为解决这个问题所做的黑客是这样的:

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

    onsubmit: false

});

这样,验证在提交时被禁用。这不干净,可能会导致一些问题,但这是我目前所拥有的一切......

于 2013-05-01T15:45:23.053 回答