2014-04-23 78 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); 
});