2012-08-03 13 views
5

Próbuję połączyć przyciski radiowe i text_field dla pojedynczej wartości:Mieszanie przyciski radiowe i text_field

= f.radio_button :system, "bacteria" 
Bacteria 
= f.radio_button :system, "mammalian" 
Mammalian 
= f.radio_button :system, "yeast" 
Yeast 
= f.radio_button :system, "insect" 
Insect 
= f.radio_button :system, "other" 
Other: 
= f.text_field :system, class:"input-small" 

Kiedy złożyć, nic się nie dzieje, ponieważ pusta wartość podana jest w params nawet jeśli radio jest sprawdzana (Myślę, że rozważa pole tekstowe).

Próbowałem dać inną nazwę do text_field, a zastąpił: wartość systemową w kontrolerze po aktualizacji, ale wygląda na to, brudnej drodze ...

Czy masz jakieś czystsze pomysły?

Odpowiedz

2

Tutaj nie można bezpośrednio połączyć radio_button i text_field razem dla tego samego pola. Myślę, że możesz zdefiniować jedno dodatkowe pole radio_button, które będzie ukryte i którego wartość zostanie zaktualizowana po wejściu użytkownika w pole tekstowe.

= f.radio_button :system, "bacteria" 
Bacteria 
= f.radio_button :system, "mammalian" 
Mammalian 
= f.radio_button :system, "yeast" 
Yeast 
= f.radio_button :system, "insect" 
Insect 
= f.radio_button :system, "other" 
Other: 
= f.radio_button :system, nil, :id => :hidden_radio, :style => "display:none" 
= f.text_field :free_system_input, class:"input-small", :id => :free_system_input 

W powyżej was pisać onchange na text_field a gdy wartość zostanie wprowadzona do wnętrza text_field będzie ustawiona wartość ukrytej radio_button do tej text_field_value.

:javascript 
$("free_system_input").keyup(function(){ 
    $("hidden_radio").val($(this).val()) 
}) 

Powyższy kod jest po prostu dać pomysł jak radzić sobie z problemu i nie będzie działać tak jak to jest .. :)

2

Dzięki pomocy Sandip za udało mi się rozwiązać mój problem!

Oto widok:

= f.radio_button :system, "bacteria" 
Bacteria 
= f.radio_button :system, "mammalian" 
Mammalian 
= f.radio_button :system, "yeast" 
Yeast 
= f.radio_button :system, "insect" 
Insect 
%br/ 
= f.radio_button :system, nil, id: 'other_system_radio', 
       checked: radio_checked?('system', f.object.system) 
Other: 
%input.input-small#other_system_text{ value: text_input?('system', f.object.system) } 

używam funkcji pomocniczych do zarządzania formularz edycji (wypełnić pole tekstowe, jeżeli wartość, jeśli różni się od podanych nich):

def radio_checked?(type,val) 
    case type 
    when 'system' 
     ['bacteria', 'mammalian', 'yeast', 'insect'].include?(val) ? '' : 'checked'    
    end 
    end 

def text_input?(type,val) 
    case type 
    when 'system' 
     ['bacteria', 'mammalian', 'yeast', 'insect'].include?(val) ? '' : val 
    end  
end 

i trochę z Javascript, aby wybrać przycisk radiowy "Inne", gdy użytkownik ustawia ostrość w polu tekstowym:

@handle_other_field = -> 
    $('#other_system_text').focus(-> $('#other_system_radio').attr('checked','checked')) 
    $('#other_system_text').keyup(-> $('#other_system_radio').val($(this).val())) 
Powiązane problemy