禁用提交按钮,除非Ruby on Rails中的file_field_tag不为null

时间:2011-11-10 12:18:19

标签: ruby-on-rails button

我有一个表单,并且在该表单中有一个submit_tag和一个文件字段标记。只要用户没有选择文件,就必须禁用提交按钮。填写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 -%>

提前致谢!

3 个答案:

答案 0 :(得分:1)

我会使用jQuery(或普通js)绑定&#34;更改&#34; file_field_tag的事件处理程序。 使用file_field_tag上的jQuery .val()函数检查文件是否存在。代码示例如下:

&#13;
&#13;
@ControllerAdvice
public class ExceptionHandler extends ResponseEntityExceptionHandler
{
    @ExceptionHandler(value = {Exception.class, RuntimeException.class})
    public ResponseEntity<Object> handleException(HttpStatus status, WebRequest request, Exception exception) throws Exception
    {
        return null; //Put breakpoint here
    }

    /*@ExceptionHandler(value = Exception.class)
    public ResponseEntity<Object> handleException(Exception exception) throws Exception
    {
        return null;
    }*/
}
&#13;
&#13;
&#13;

我可能还建议在file_field_tag上添加 <%= 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

答案 1 :(得分:0)

你需要使用javascript来做客户端。最初将按钮设置为禁用,然后使用在输入字段更改时运行的客户端方法。该方法将检查是否有值并启用该按钮。我通过jQuery使用不引人注目的js。

答案 2 :(得分: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