【发布时间】:2012-06-08 16:06:05
【问题描述】:
我正在使用 selected.js (http://harvesthq.github.com/chosen/)。我想知道是否有人能够同时使用选定的选择框和 client_side_validations。
问题是,当我们使用 selected 时,它会隐藏原始 select 元素并呈现自己的下拉菜单,当我们关注时不会调用验证,并且当显示验证消息时,它会与原始 select 一起显示元素,因此错误的定位也不正确。
什么是处理这个问题的好方法,我们可以更改ActionView::Base.field_error_proc 中的一些代码,目前看起来像
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
unless html_tag =~ /^<label/
%{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
else
%{<div class="field_with_errors">#{html_tag}</div>}.html_safe
end
end
有什么想法吗?
编辑 1:
我现在有以下解决方案。
- 将“chzn-dropdown”类应用到我所有由 selected 显示的选择
- 使用了 client_side_validations Gem 提供的以下回调
clientSideValidations.callbacks.element.fail = function(element, message, callback) {
if (element.data('valid') !== false) {
if(element.hasClass('dropdown')){
chzn_element = $('#'+element.attr('id')+'_chzn');
console.log(chzn_element);
chzn_element.append("<label class='message-chzn'>"+message+"</label>");
}
else{
callback();
}
}
}
【问题讨论】:
-
你在哪里添加回调到你的应用程序?
标签: ruby-on-rails client-side-validation jquery-chosen