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

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

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

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1115閲覧

jqueryを用いて画像選択後にプレビュー表示をさせたいが、リロードをしないとプレビュー表示されない。

Sakamotos

総合スコア7

Ruby on Rails 5

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/02/01 09:57

編集2020/02/01 10:02

前提・実現したいこと

環境
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}

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Turbolinksによる影響だと思います。
下記のように$(document).on('turbolinks:load', function() {});で囲むとうまくいくかと思います。

$(document).on('turbolinks:load', function() { //ここにJqueryのコードを記載する。 });

投稿2020/02/02 00:01

no1knows

総合スコア3365

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

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

Sakamotos

2020/02/04 09:15

no1knows様 ご回答頂き誠にありがとうございます。 回答いただいた通りに修正した所、解決いたしました。 私自身、Turbolinksに関して知識が乏しかったため、 改めてTurbolinksに関して、勉強してみます。 この度はありがとうございました。
no1knows

2020/02/04 11:56

それは良かったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問