私は selected.js ( http://harvesthq.github.com/chosen/ ) を使用しています。誰かが選択した選択ボックスと client_side_validations を一緒に使用できるかどうか疑問に思っていました。
問題は、choose を使用すると、元の 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」を適用しました
- 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();
}
}
}