2016-02-20 130 views
0

如何使用自定义上传文件?自定义文件输入

<%= f.file_field :image, class: 'inputfile' %> 
<label for="image">Choose an image</label> 

我希望将“选择图像”与“选择文件”

回答

1

你的JavaScript缺少逻辑来获得所选择的文件名作为教程:

var fileName = e.target.value.split('\\').pop(); 

所以您的JavaScript将更新为:

input.addEventListener('change', function(e) { 
    var inspiration_image = e.target.value.split('\\').pop(); 
    if(inspiration_image) { 
    label.querySelector('span').innerHTML = inspiration_image; 
    } else { 
    label.innerHTML = labelVal; 
    } 
}); 

更新完整的cod e

<%= file_field_tag :image, class: 'inputfile' %> 
<label for="inspiration_image">Choose a file</label> 

<script> 
    var inputs = document.querySelectorAll('.inputfile'); 
    Array.prototype.forEach.call(inputs, function(input) { 
    var label = input.nextElementSibling, 
     labelVal = label.innerHTML; 

    input.addEventListener('change', function(e) { 
     var fileName = ''; 
     if(this.files && this.files.length > 1) { 
      fileName = (this.getAttribute('data-multiple-caption') || '').replace('{count}', this.files.length); 
     } else { 
      fileName = e.target.value.split('\\').pop(); 
     } 

     if(fileName) { 
      label.querySelector('span').innerHTML = fileName; 
     } else { 
      label.innerHTML = labelVal; 
     } 
    }); 
    }); 
</script> 
+0

对不起,Hieu没有工作。当我替换教程'file'和'files'时,你认为我把'inspiration_image'放在了正确的位置上?文件输入的完整html:'选择一个文件' –

+0

我是不确定,让我们更新您对当前问题以及预期结果有何疑问? –

+0

当前问题与以前相同,即选择文件后,“选择图像”文本没有更改为所选文件的名称,这是预期结果。对不起,idk如果澄清是有帮助的。 –