前提・実現したいこと
環境
ruby 2.5.1
rails 5.2
railsで写真投稿アプリケーションを作成しています。
写真投稿時にjqueryを用いて、
画像をプレビュー表示させたいと思っていますが、
写真を選択してもプレビュー表示されません。
発生している問題・エラーメッセージ
リロードをしてから、再度写真を選択するとプレビュー表示が成功します。
リロードをしなくとも、一発で写真をプレビュー表示をさせたいのですが、
うまく実装できません。
該当のソースコード
haml
1.container 2 .form 3 = form_with(model: @post, local: true) do |form| 4 .form__h3 投稿する 5 = form.label '写真を選択してください' do 6 #img-field{onclick: "$('#file').click()"} 7 - if @post.image.url.present? 8 = image_tag(@post.image.url) 9 - else 10 .field-icon 11 = icon('fas', 'image', class: "field-icon__image") 12 %apan.field-icon__text 写真を選択してください 13 = form.file_field :image, class: "form__field", style: "display:none;", id: "file" 14 = form.text_field :title, placeholder: "タイトル", class: "form__input" 15 = form.text_area :text, placeholder: "説明" , rows: "10", class: "form__input" 16 = form.submit "SEND", class: "form__btn form__input"
jquery
1$(function(){ 2 fileField = $('#file') 3 // 選択された画像を取得し表示 4 fileField.on('change', fileField, function(e) { 5 var file = e.target.files[0] 6 var reader = new FileReader(), 7 $preview = $("#img-field"); 8 reader.onload = (function(file) { 9 return function(e) { 10 $preview.empty(); 11 $preview.append($('<img>').attr({ 12 src: e.target.result, 13 width: "100%", 14 class: "preview", 15 title: file.name 16 })); 17 }; 18 })(file); 19 reader.readAsDataURL(file); 20 }); 21});
CSS
1#img-field { 2text-align: center; 3width: 528px; 4height: 320px; 5font-size: 15px; 6margin: 10px 66px; 7border: 1px solid #D8D8D8; 8color: #666; 9border-radius: 5px; 10cursor: pointer; 11background-position: center; 12background-repeat: no-repeat; 13background-size: contain; 14background-color: #fff; 15overflow: hidden; 16box-sizing: border-box; 17transition: 0.3s ease-out; 18 &:hover { 19 background-color: #3AD6B2; 20 transition: 0.3s ease-out; 21 opacity: 0.9; 22 } 23} 24 25.preview{ 26 width: 100%; 27 height: 100%; 28 object-fit: cover; 29} 30 31.field-icon{ 32 text-align: center; 33 color: #aaa; 34 position: relative; 35 &__image{ 36 display: inline; 37 font-size: 70px; 38 line-height: 320px; 39 transition: 0.3s ease-out; 40 &:hover { 41 transition: 0.3s ease-out; 42 opacity: 0.9; 43 } 44 } 45 &__text{ 46 display: block; 47 position: absolute; 48 bottom: 90px; 49 right: 182px; 50 } 51}
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/04 09:15
2020/02/04 11:56