2011-11-10 13 views
1

私はフォームを持っていて、そのフォームにsubmit_tagとfileフィールドタグがあります。ユーザーがファイルを選択しない限り、送信ボタンは無効にする必要があります。 file_field_tagが満たされたら、ボタンを有効にする必要があります。これを行う最善の方法は何ですか?Ruby on Railsでfile_field_tagがヌルでない限り、サブミットボタンを無効にします

これは私のコードです:事前に

<% 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経由で控えめなjsを使用したいと思います。

+0

をそして、どのようにこのように見えるのでしょうか?私は今持っています: <%= submit_tag 'Submit'、: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

私はfile_field_tagに「変更」イベントハンドラをバインドするjQueryの(またはプレーンJS)を使用します。 ファイルが存在するかどうかを確認するには、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>

は、私は、単にfile_field_tagにrequired: trueオプションを追加することの代替ソリューション提案するかもしれません:

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