【问题标题】:Client_Side_Validation - Display position of validation "Password doesn't match confirmation"Client_Side_Validation - 显示验证位置“密码不匹配确认”
【发布时间】:2012-12-09 08:36:25
【问题描述】:

我已经为我的验证表单应用程序尝试了 client_side_validations gem,效果非常好。我正在为我的用户模型使用设计,当我转到 new_user_registration 表单时,当我写密码并将 [点击选项卡] 更改为字段密码确认时,在字段密码一侧显示验证“与确认不匹配”。

查看我的应用进行注册:Example Devise

在模型上

validates_confirmation_of :password, :only => :create
validates_presence_of :password

如何在字段密码确认中显示“与密码不匹配”的验证位置?

【问题讨论】:

  • 谁能帮帮我:(
  • 你解决了这个问题吗?

标签: ruby-on-rails devise client-side-validation


【解决方案1】:

我正在分享我的解决方案。

我破解了代码,以便正确显示密码确认错误,并且仅在输入错误确认密码后才显示。适用于 Zurb-Foundation 表单错误。

文件位于 app/assets/rails.validators.js

//= require rails.validations


window.ClientSideValidations.formBuilders['ActionView::Helpers::FormBuilder'] = {
  add: function(element, settings, message) {
    var form = $(element[0].form);

    if (element.data('valid') !== false) {
      var for_id = element.attr('id');
      if (form.find("label.error[for='" + for_id + "']")[0] == null) {
        form.find("label[for='" +  for_id + "']").addClass('error');
        element.addClass('error');
        element.after('<small class="message error" for="' + for_id + '">' + message + '</small>');
      } 
    }

    return form.find("small.message[for='" + (element.attr('id')) + "']").text(message);
  },
  remove: function(element, settings) {
    var form = $(element[0].form);

    if (element.hasClass('error')) {
      var for_id = element.attr('id');
      form.find("label[for='" +  for_id + "']").removeClass('error');
      element.removeClass('error');
      form.find("small.error[for='" + for_id + "']").remove();
    }
    return element;
  }
}



window.ClientSideValidations.callbacks.element.fail = function(element, message, callback, event) {
  if (message.indexOf("doesn't match") != -1) {

    var eid = element.attr('id');
    var conf_el = $(element[0].form).find('#' + eid + '_confirmation');

    var form_id = $(element[0].form).attr('id');

    var settings = window.ClientSideValidations.forms[form_id];

    if (conf_el.data('interacted')) {
        ClientSideValidations.formBuilders[settings['type']].add(conf_el, settings, message);
    }
    ClientSideValidations.formBuilders[settings['type']].remove(element, settings);
    //callback();
  } else {
    callback();
  }
}


window.ClientSideValidations.callbacks.element.pass = function(element, callback, event) {
  var eid = element.attr('id');
  var conf_el = $(element[0].form).find('#' + eid + '_confirmation');

  if (conf_el.size() > 0) {
    var form_id = $(element[0].form).attr('id');
    var settings = window.ClientSideValidations.forms[form_id];
    //var settings = window.ClientSideValidations.forms['new_user'];
    ClientSideValidations.formBuilders[settings['type']].remove(conf_el, settings);
  } 

  callback();
}



$(function() {
  //bind change keyup keypress
  $("input[id$=_confirmation]").on('keyup keypress change', function(e) {
    $(this).data('interacted', true);
    $(this).off('keyup keypress change');
  });
});

【讨论】:

  • 您能具体说明一下您在哪里进行了更改吗?这适用于引导程序吗?
猜你喜欢
  • 2014-10-18
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2018-05-06
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多