2012-08-03 10 views
5

Sto cercando di coniugare pulsanti di opzione e text_field per un unico valore:miscelazione pulsanti di opzione e 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" 

Quando mi presento, non succede nulla, perché un valore vuoto è dato in params anche se una radio è selezionata (Penso che consideri il campo di testo).

ho cercato di dare un altro nome al text_field, e ha sostituito il: valore di sistema nel controller dopo l'aggiornamento, ma si presenta come un modo sporco ...

Avete qualche idea più pulite?

risposta

2

Qui non è possibile combinare direttamente radio_button e text_field insieme per lo stesso campo. Penso che tu possa definire un campo radio_button aggiuntivo che sarà nascosto e il cui valore verrà aggiornato quando l'utente entra in 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.radio_button :system, nil, :id => :hidden_radio, :style => "display:none" 
= f.text_field :free_system_input, class:"input-small", :id => :free_system_input 

In precedenza si sarà iscritto onchange evento su text_field e ogni volta che il valore viene immesso all'interno text_field che verrà impostato il valore di radio_button nascosto al text_field_value.

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

Sopra il codice è solo per dare un'idea di come affrontare problema e non funzionerà proprio come è .. :)

2

Grazie all'aiuto di Sandip, sono riuscito a risolvere il mio problema!

Qui è la vista:

= 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) } 

Io uso funzioni di supporto per gestire modulo di modifica (riempire il campo di testo se il valore se diverse da quelle date):

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 

E un po ' di Javascript per selezionare il pulsante di opzione "Altro" quando l'utente si concentra sul campo di testo:

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