2011-11-10 26 views
1

我有一個表單,並且在那個表單中有一個submit_tag和一個文件字段標記。只要用戶不選擇文件,就必須禁用提交按鈕。當填充file_field_tag時,必須啓用該按鈕。做這個的最好方式是什麼?禁用提交按鈕,除非file_field_tag在Ruby on Rails中不爲空

這是我的代碼:

<% form_tag({:action => 'match'}, {:multipart => true, :id => 'file_form_id'}) do %> 


     <%= file_field_tag 'file', :size => 500%></p> 

     <%= submit_tag 'Submit' -%> 


<% end -%> 

在此先感謝!

回答

0

你需要用javascript來做客戶端。設置最初禁用的按鈕,然後在輸入字段更改時運行客戶端方法。該方法將檢查是否有值並啓用按鈕。我會通過jQuery使用unobtrusive js。

+0

而且怎麼會是這個樣子?我現在有: <%= submit_tag'提交',:disabled => true - %>,但如何啓用它?我在互聯網上找不到真實的例子... – user1027319

+0

轉到jquery.com。你需要學習客戶端JavaScript來完成這項工作。 jQuery是最簡單的方法。你不會在你的Ruby代碼中實現它。 – jdc

0

我知道這並不回答你的問題,但這裏是我如何解決同樣的問題。我檢查該文件中的控制器的方法的存在,它使用它:

def import 
    if params[:file].nil? 
    redirect_to some_model_url, alert: "CSV document not present." 
    else 
    ModelName.import(params[:file]) 
    redirect_to some_model_url, notice: "Model Name collection imported." 
    end 
end 
0

我會使用jQuery(或純的js)以結合「改變」的事件處理程序的file_field_tag。 使用file_field_tag上的jQuery .val()函數檢查文件是否存在。下面的代碼示例:

<%= form_tag(import_substitutions_path, :method => :post, multipart: true) do %> 
 
    <%= file_field_tag 'file-field' %> 
 
    <%= submit_tag "Import CSV", disabled: true, id: 'csv-import-submit' %> 
 
    <% end %> 
 

 
<script> 
 
    var csvField = $('#file-field'); 
 
    var submitButton = $('#csv-import-submit'); 
 
    $(csvField).change(function() { 
 
    var fileValue = $(csvField).val(); 
 
    if (fileValue.empty()) { 
 
     $(submitButton).attr("disabled", true); 
 
    } else { 
 
     $(submitButton).attr("disabled", false); 
 
    } 
 
    }) 
 
</script>

我也可能會建議的簡單相加的required: true選項上file_field_tag的替代解決方案:

<%= file_field_tag 'file-field', required: true %>