2014-04-23 53 views
0

对不起,我不能得到一个更好的标题给我的问题,但希望我的解释会给你们一个更好的想法发生了什么?显示不同的控制取决于轨道收集选择(选择)项目

我一个模型Airport及其他三个车型WestEastSouth那些无论如何也不能只Airport模型相关需要一些类似这样的表格显示了其他领域。

<%= form_for(@airport) do %> 
    <%= f.collection_select(:airport_name, AirPortManager.all, etc...) %> 
     //AirPortManager is a collection of available airports 

    <div class="west-airports" style="display:none;"> 
     <%= f.collection_select(:airline_name, WestAirlineManager.all, ....) %> 
    </div> 

    <div class="east-airports" style="display: none;"> 
     <%= f.collection_select(:airline_name, EastAirlineManager.all, ....) %> 
    </div> 


    <div class="south-airports" style="display: none;"> 
     <%= f.collection_select(:airline_name, EastAirlineManager.all, ....) %> 
    </div> 
<% end %> 

机场模型validates :airline_name, :presence => true。现在的问题是与

我的JavaScript。如果用户在AirPortManager.all中选择机场西,则应该显示west-airports div`等等。但是我的验证方法airport一直在为:airline_name抛出一个必需的字段错误,如果不是,它保留了先前选择的值。我如何将可见的div值传递给机场参数,或者如果我选择一个空值,则以前的值不应保持不变。下面是我的JavaScript,希望我的问题是有道理的。

<script type="text/javascript"> 
    $(document).ready(function() { 
      $("#aiport_manager_aiport_name").change(function(){ 
       var value = this.value; 
       if (value == "West") { 
        $('.west-aiports').show(); 
        $('.east-airports').attr("disabled", true); 
        $('.east-airports').hide(); 
        $('.south-airports').attr("disabled", true); 
        $('.south-airports').hide(); 
        } 
       else if (value == "East") { 
        $('.east-airports').show(); 
        $('.west-aports').hide(); 
        $('.west-airports').attr("disabled", true); 
        $('.south-airports').hide(); 
        $('.south-airports').attr("disabled", true); 
        } 
       else if (value == "South") { 
        $('.south-aiports').show(); 
        $('.west-airports').hide(); 
        $('.west-airports').attr("disabled", true); 
        $('.east-airports').hide(); 
        $('.east-airports').attr("disabled", true); 
        } 
       }); 
      }); 
</script> 

我尝试在各自的div禁用其他collection_selects,但仍然得到了验证错误或得到一个持久的价值。

回答

0

您的表单有多个具有相同名称(:airline_name)的元素,这是核心问题。您正在禁用正确的轨道,但您禁用了div而不是select。我只是这样做:

// before form is submitted, disable all hidden selects 
$('form').on('submit', function(e) { 
    $('select:hidden').prop('disabled', true); 
});