質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1080閲覧

画像のプレビュー表示を行いたい

akito_tl

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/09/07 11:59

#質問
画像投稿機能の実装にruby on railsにて挑戦しています。
複数投稿を行うために、ファイル選択をし画像を選ぶと、
新しいファイル選択が増え更に画像を選択できるという挙動を実装できたのですが、
選択した画像をプレビュー表示するという挙動を実装する事ができません。
(投稿すると枠線のみが表示されます)(画像はitem_imageテーブルへ保存しております。)
#行ったこと
他サイトを参考にし、関数buildImgを定義し、indexとurlを受け取ってimgタグを
生成するというコードを書いたのですが上手く行きません。。。

下記にコードを記載致しますので、
ご教授のほど宜しくお願い致します。

item.js

$(document).on('turbolinks:load', ()=> { const buildFileField = (index)=> { const html = `<div data-index="${index}" class="js-file_group"> <input class="js-file" type="file" name="item[item_images_attributes][${index}][image]" id="item_item_images_attributes_${index}_image"><br> <div class="js-remove">削除</div> </div>`; return html; } const buildImg = (index, url)=> { const html = `<img data-index="${index}" image="${url}" width="100px" height="100px">`; return html; } let fileIndex = [1,2,3,4,5,6,7,8,9,10]; lastIndex = $('.js-file_group:last').data('index'); fileIndex.splice(0, lastIndex); $('.hidden-destroy').hide(); $('.image-file').on('change', '.js-file', function(e) { const targetIndex = $(this).parent().data('index'); const file = e.target.files[0]; const blobUrl = window.URL.createObjectURL(file); if (img = $(`img[data-index="${targetIndex}"]`)[0]) { img.setAttribute('image', blobUrl); } else { $('#previews').append(buildImg(targetIndex, blobUrl)); $('.image-file').append(buildFileField(fileIndex[0])); fileIndex.shift(); fileIndex.push(fileIndex[fileIndex.length - 1] + 1) } }); $('.image-file').on('click', '.js-remove', function() { const targetIndex = $(this).parent().data('index'); const hiddenCheck = $(`input[data-index="${targetIndex}"].hidden-destroy`); if (hiddenCheck) hiddenCheck.prop('checked', true); $(this).parent().remove(); $(`img[data-index="${targetIndex}"]`).remove(); if ($('.js-file').length == 0) $('.image-file').append(buildFileField(fileIndex[0])); }); });

new.html.haml

.items = form_with model: @item,local: true do |f| .items__box .items__box--list %p.name 出品画像 %p.need 必須 .items__box--image #previews - if @item.persisted? - @item.item_images.each_with_index do |item_image, i| = image_tag item_image.image, data: { index: i }, width: "100", height: '100' = f.fields_for :item_images,@item.item_images.build do |item_image| .js-file_group{"data-index" => "#{item_image.index}"} .image-file = item_image.file_field :image,class: 'js-file' %span.js-remove 削除 - if @item.persisted? = image.check_box :_destroy, data:{ index: item_image.index }, class: 'hidden-destroy' - if @item.persisted? .js-file_group{"data-index" => "#{@item.item_images.count}"} = file_field_tag :image, name: "item[item_images_attributes][#{@item.item_images.count}][]", class: 'js-file' .js-remove 削除

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問