2016-10-22 97 views
0

請問我有關於使用Django-crispy-form創建表單的問題。我想要一個有兩個字段的表格,第一個字段的選擇隱藏/顯示第二個字段。Django香脆形式 - 使用單選按鈕來隱藏/顯示其他字段

  • 1st field:單選按鈕< =此選項隱藏/顯示第二個字段。
  • 第二場:浮動場

我已經試過是:

  1. 給ID以單選按鈕,把第2場進一個div
  2. 運行一個JS功能,點擊時基於指定的ID的單選按鈕。
  3. 在JS函數中,獲取單選按鈕的值
  4. 根據該值,隱藏/顯示包含第二個字段的div。

但在第3步,我總是得到「未定義的值」。我想這是因爲我不能將id分配給選項/選項,而只是對整個單選按鈕沒有任何價值。但這只是我的猜測。請參閱我的簡單代碼,如果有人能幫助我,我將非常感激。

非常感謝!

forms.py

from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Layout, Fieldset, ButtonHolder, Submit 
from crispy_forms.bootstrap import InlineRadios,PrependedAppendedText,Div 

class my_form(forms.Form): 
    # Radio button field 
    cargo = forms.ChoiceField(label='Cargo on Deck', 
           choices=[('true','Yes'), 
             ('false','No')], 
           initial='false') 
    # the 2nd field 
    L = forms.DecimalField(label='Length: L [m]') 

    ### Render form 
    def __init__(self, *args, **kwargs): 
     super(my_form, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.form_id = 'my_form_id' 
     self.helper.form_class = 'blueForms' 
     self.helper.form_method = 'post' 
     self.helper.add_input(Submit('submit', 'Calculate')) 

     self.helper.form_class = 'form-horizontal' 
     self.helper.label_class = 'col-lg-4' 
     self.helper.field_class = 'col-lg-8' 

     # step 1: Assign id to radio, put 2nd field in a div 
     self.helper.layout = Layout(
      InlineRadios('cargo',id="radio_id"), 
      Div('L', css_id="div_id"), 
     ) 

HTML

<!-- Html --> 
 
{% extends 'home/home_base.html' %} 
 
{% block content %} 
 
    <div class="row"> 
 
     <div class="col-sm-6"> 
 
      <!-- {% csrf_token %}--> 
 
      {% load crispy_forms_tags %} 
 
      {% crispy my_form my_form.helper %} 
 
     </div> 
 
    </div> 
 
    
 
    <!-- JS --> 
 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
 
    
 
    <script type="text/javascript"> 
 
     // step 2: run function when clicking radio button 
 
     $(document).ready(function() { 
 
     $('#radio_id').on('change',function(){ 
 
      // step 3: get selected value 
 
      var selected_value = $('input[id="radio_id"]:checked').val(); 
 
      alert(selected_value); // somehow this always gives "undefined value" 
 
    
 
      // step 4: hide/show dive based on selected_value 
 
      if($(this).val()=="true"){ 
 
       $("#div_id").hide() 
 
      } 
 
      else{ 
 
       $("#div_id").show() 
 
      } 
 
     }); 
 
     }); 
 
    </script> 
 
{% endblock %}

回答

0

對於第3步在HTML文件中,請嘗試使用:

$('input[name="cargo"]:checked').val();