2012-08-03 22 views
5

मैं एक ही मूल्य के लिए रेडियो बटन और text_field गठबंधन करने के लिए कोशिश कर रहा हूँ मिश्रण:रेडियो बटन और 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" 

जब मैं प्रस्तुत, कुछ नहीं होता क्योंकि एक खाली मूल्य पैरामीटर में दी गई है, भले ही एक रेडियो चेक किया गया है (मुझे लगता है कि यह टेक्स्ट फ़ील्ड को मानता है)।

मैं text_field के लिए एक और नाम देने की कोशिश की, और बदले गए: अद्यतन करने के बाद नियंत्रक में प्रणाली मूल्य है, लेकिन यह एक गंदा रास्ता तरह लग रहा है ...

आप किसी भी क्लीनर विचारों है?

उत्तर

2

यहां आप सीधे उसी क्षेत्र के लिए रेडियो_बटन और टेक्स्ट_फील्ड को सीधे मिश्रण नहीं कर सकते हैं। मुझे लगता है कि आप एक अतिरिक्त रेडियो_बटन क्षेत्र को परिभाषित कर सकते हैं जो छुपाया जाएगा और जब उपयोगकर्ता टेक्स्ट_फील्ड में प्रवेश करता है तो उसका मूल्य अपडेट हो जाएगा।

= 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 

आप ऊपर में text_field पर onchange घटना लिख ​​दिया जाएगा और जब भी मूल्य text_field अंदर प्रवेश किया जाता है यह text_field_value को छिपा radio_button के मूल्य तय करेंगे।

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

कोड से ऊपर सिर्फ विचार कैसे इस मुद्दे से निपटने के लिए दे रहा है और सिर्फ काम नहीं करेगा के रूप में यह है .. :)

2

धन्यवाद संदीप की मदद करने के लिए, मैं अपने इस समस्या को ठीक करने में कामयाब रहे!

यहाँ दृश्य है:

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

मैं सहायक कार्यों का उपयोग संपादित करें प्रपत्र प्रबंधन करने के लिए (पाठ क्षेत्र को भरने यदि मान यदि दिए गए लोगों से भिन्न है):

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 

और एक सा जावास्क्रिप्ट का "अन्य" रेडियो बटन चुनने के लिए जब उपयोगकर्ता टेक्स्ट फ़ील्ड पर केंद्रित होता है:

@handle_other_field = -> 
    $('#other_system_text').focus(-> $('#other_system_radio').attr('checked','checked')) 
    $('#other_system_text').keyup(-> $('#other_system_radio').val($(this).val())) 
संबंधित मुद्दे