2016-02-20 182 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如果澄清是有幫助的。 –