我有一个表单,并且在该表单中有一个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 -%>
提前致谢!
答案 0 :(得分:1)
我会使用jQuery(或普通js)绑定&#34;更改&#34; file_field_tag的事件处理程序。 使用file_field_tag上的jQuery .val()函数检查文件是否存在。代码示例如下:
@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;
我可能还建议在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