Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 客户端“验证-显示验证位置”;密码不存在';t匹配确认“;_Ruby On Rails_Devise_Client Side Validation - Fatal编程技术网

Ruby on rails 客户端“验证-显示验证位置”;密码不存在';t匹配确认“;

Ruby on rails 客户端“验证-显示验证位置”;密码不存在';t匹配确认“;,ruby-on-rails,devise,client-side-validation,Ruby On Rails,Devise,Client Side Validation,我已经为我的验证表单应用尝试了客户端验证gem,效果非常好。我正在使用Desive for my users型号,当我进入新用户注册表单时,在我写入密码时,在字段密码的一侧显示验证“不匹配确认”,并将[tap tab]更改为字段密码确认 查看我的应用以注册: 论模式 validates_confirmation_of :password, :only => :create validates_presence_of :password 如何显示验证位置“密码不匹配”字段密码确认的外观 我

我已经为我的验证表单应用尝试了客户端验证gem,效果非常好。我正在使用Desive for my users型号,当我进入
新用户注册
表单时,在我写入密码时,在字段密码的一侧显示验证“不匹配确认”,并将[tap tab]更改为字段密码确认

查看我的应用以注册:

论模式

validates_confirmation_of :password, :only => :create
validates_presence_of :password
如何显示验证位置“密码不匹配”字段密码确认的外观


我正在分享我的解决方案

我破解了密码,这样密码确认错误才会正确显示,而且只有在确认密码输入错误后才会显示。使用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');
  });
});
/=需要rails.validation
window.ClientSideValidations.formBuilders['ActionView::Helpers::FormBuilder']={
添加:功能(元素、设置、消息){
var form=$(元素[0].form);
if(element.data('valid')!==false){
_id的变量=element.attr('id');
if(form.find(“label.error[for='”+for_id+']])[0]==null){
form.find(“label[for='”+for_id+“]”).addClass('error');
元素addClass('error');
元素后(“”+消息+“”);
} 
}
返回form.find(“small.message[for='”+(element.attr('id'))+”]);
},
删除:功能(元素、设置){
var form=$(元素[0].form);
if(element.hasClass('error')){
_id的变量=element.attr('id');
form.find(“label[for='”+for_id+“]”).removeClass('error');
element.removeClass('error');
form.find(“small.error[for='”+for_id+“']”)remove();
}
返回元素;
}
}
window.ClientSideValidations.callbacks.element.fail=函数(元素、消息、回调、事件){
if(message.indexOf(“不匹配”)!=-1){
var eid=element.attr('id');
var conf_el=$(元素[0].form).find('#'+eid+'_确认');
var form_id=$(元素[0]。form.attr('id');
var settings=window.ClientSideValidations.forms[form_id];
if(配置数据(‘交互’){
ClientSideValidations.formBuilders[settings['type']].add(conf_el,settings,message);
}
ClientSideValidations.formBuilders[设置['type']]。删除(元素,设置);
//回调();
}否则{
回调();
}
}
window.ClientSideValidations.callbacks.element.pass=函数(元素、回调、事件){
var eid=element.attr('id');
var conf_el=$(元素[0].form).find('#'+eid+'_确认');
如果(conf_el.size()>0){
var form_id=$(元素[0]。form.attr('id');
var settings=window.ClientSideValidations.forms[form_id];
//var settings=window.ClientSideValidations.forms['new_user'];
ClientSideValidations.formBuilders[settings['type']]。删除(conf_el,settings);
} 
回调();
}
$(函数(){
//绑定更改键向上按键
$(“输入[id$=\U确认]”)。在('keyup keypress change',函数(e)上{
$(this).data('interactited',true);
$(此).off('keyup keypress change');
});
});

有人能帮我吗:(你解决了这个问题吗?你能具体说明一下,你到底在哪里做了更改吗?这对引导有用吗?