Ruby on rails 客户端“验证-显示验证位置”;密码不存在';t匹配确认“;
我已经为我的验证表单应用尝试了客户端验证gem,效果非常好。我正在使用Desive for my users型号,当我进入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 如何显示验证位置“密码不匹配”字段密码确认的外观 我
新用户注册
表单时,在我写入密码时,在字段密码的一侧显示验证“不匹配确认”,并将[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');
});
});
有人能帮我吗:(你解决了这个问题吗?你能具体说明一下,你到底在哪里做了更改吗?这对引导有用吗?