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

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

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

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

jQuery Validation Plugin

jQuery Validation PluginはjQueryのプラグインであり、クライアント側のデータ検証を行う役割があります。

Ruby on Rails

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

JavaScript

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

jQuery

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

Q&A

1回答

1369閲覧

jQueryを使って、条件に合わせて表示・非表示にしたい

ren0826nosuke

総合スコア34

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

jQuery Validation Plugin

jQuery Validation PluginはjQueryのプラグインであり、クライアント側のデータ検証を行う役割があります。

Ruby on Rails

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

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2020/05/12 06:29

解決したいこと

jQueryを使って、条件に合わせて表示・非表示にしたい
(画像を10枚投稿すると投稿ボタンは消えて、実際に投稿された画像を削除すると、再び投稿ボタンが出現する様にしたい)

現状

現在、フリマサイトの出品ページを実装中です。
出品物の画像を10枚まで投稿出来て、10枚になると投稿ボタンが消えて投稿出来なくなります。
しかし、元々投稿されている画像を削除して全部で9枚になった際に投稿ボタンが出現しないため、他の投稿ができない。

試したこと

if文を追加して10枚以下の場合、出現させる様にした。

省略 if (num == 10){ $('.photo_space').css('display', 'none') } if (num < 10){ $('.photo_space').css('display', 'block') } 省略

コード記述

new.html.haml

省略 .new_page_main .new_page_main__index = form_with(url: products_path, local: true) do |form| .new_page_main__photo %span.label_title 出品画像 %span.required 必須 %p.upload_limit 最大10枚までアップロードできます #image-box-1 .item-num-0#image-box__container %div.photo_space ドラッグ&ドロップまたはクリックしてファイルをダウンロード .file__box = form.fields_for :product_photos do |m| = m.label :photo, class: "form-image" do = m.file_field :photo, type: 'file', name: "item[images_attributes][][image_url]", value:"", style: "display:none", id:"img-file" %label{for: "img-file"} %i.fas.fa-camera 省略

product_new.js

// プレビュー機能 $(function(){ var dataBox = new DataTransfer(); var file_field = document.querySelector('input[type=file]') $('#img-file').change(function(){ var files = $('input[type="file"]').prop('files')[0]; $.each(this.files, function(i, file){ var fileReader = new FileReader(); dataBox.items.add(file) file_field.files = dataBox.files var num = $('.item-image').length + 1 + i fileReader.readAsDataURL(file); if (num == 10){ $('.photo_space').css('display', 'none') } if (num < 10){ $('.photo_space').css('display', 'block') } fileReader.onloadend = function() { var src = fileReader.result var html= `<div class='item-image' data-image="${file.name}"> <div class=' item-image__content'> <div class='item-image__content--icon'> <img src=${src} width="114" height="80" > </div> </div> <div class='item-image__operetion'> <div class='item-image__operetion--delete'>削除</div> </div> </div>` $('#image-box__container').before(html); }; $('#image-box__container').attr('class', `item-num-${num}`) }); }); $(document).on("click", '.item-image__operetion--delete', function(){ var target_image = $(this).parent().parent() var target_name = $(target_image).data('image') if(file_field.files.length==1){ $('input[type=file]').val(null) dataBox.clearData(); }else{ $.each(file_field.files, function(i,input){ if(input.name==target_name){ dataBox.items.remove(i) } }) file_field.files = dataBox.files } target_image.remove() var num = $('.item-image').length $('#image-box__container').show() $('#image-box__container').attr('class', `item-num-${num}`) }) });

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

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

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

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

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

okina

2020/05/12 06:33

数とか数えずに、削除したときには $('.photo_space').css('display', 'block') じゃダメなんですか?
ren0826nosuke

2020/05/12 06:38

10枚までっていう制限を付けたいので、現在の形にしています。 display:blockだと、制限なく投稿出来てしまうので、、 この制限をクリアして実装したいのですが、お力を貸ししてくださると嬉しいです。
guest

回答1

0

リロードしたらボタン 見えるのでは?

on("click", '.item-image__operetion--delete'

if (num < 10){
が実行される様にしなければ。
10より少ないのは確実だから、無条件でblockしても良いとは思いますが。
いずれせよ on clickの時の処理が必要です

投稿2020/05/12 06:43

編集2020/05/12 06:44
winterboum

総合スコア23567

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

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

ren0826nosuke

2020/05/12 06:48

リロードしたら見えるんですけど、投稿した内容も消えちゃいます。 どの様な記述を追記すれば良いですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問