【问题标题】:rails jquery.validate.js $.validator.methods[method] is undefinedrails jquery.validate.js $.validator.methods[method] 未定义
【发布时间】: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


【解决方案1】:

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

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

我为解决这个问题所做的事情是这样的:

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

    onsubmit: false

});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 2014-01-22
    • 2013-01-19
    • 2012-07-29
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多