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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

486閲覧

PHPforeachのループ文の中で、JS処理を毎回読み込ませる方法

revoiot

総合スコア188

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/08/20 04:47

前提・実現したいこと 試したこと

現在laravelで掲示板アプリを作成しているLaravel初心者です。
掲示板を作成する中で、phpのforeachループとJSの処理を合わせて処理させる方法がわからないため、この場で質問をさせていただきたいです。

発生している問題・エラーメッセージ

phpのforeachループで出力している投稿一覧に対してjsの処理を組み入れて、
コメントボタンを押すことによって、コメント入力欄とコメントのやりとり内容部分を表示非表示できるようにしようとしています。

しかし、 JS処理が1つ目の投稿に対してしか処理が行われず、1つ目の投稿のみコメントボタンで表示非表示可能な状態となっております。
どのようにすれば投稿すべてにコメントボタンによる開閉機能を実装することが可能でしょうか?

JS処理の読み込み場所が悪いのかと思い、あらゆる場所に置いてみて、試してみたのですが、どこにおいてもJS処理をすべての投稿に適応することができなさそうです。

ご存知の方いましたら、ご教示いただけると幸いです。

index.blade.php

@extends('layout') @foreach ($posts as $post) {{-- コメント入力欄とコメントのやりとり内容部分 --}} <div id="p1"> {{-- 内容は省略 --}} </div> @endforeach <script> //初期表示は非表示 function clickBtn1(){ const p1 = document.getElementById("p1"); if(p1.style.display=="none"){ // noneで非表示 p1.style.display ="block"; }else{ // blockで表示 p1.style.display ="block"; } } </script>

掲示板一覧画面(index.blade.php)イメージ画像 コメント欄が閉じているver
イメージ説明

掲示板一覧画面(index.blade.php
)イメージ画像 コメント欄が開いているver

イメージ説明

### 補足情報(FW/ツールのバージョンなど) Laravel Framework 7.30.2 MySQL 8.0.21 Homebrew PHP 7.4.14 Docker 19.03.13 Heroku 7.47.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

同じidはページ内に複数存在してはいけません。(HTML構文エラーです)
どうしてもidを振りたいならループ内でカウント変数(Larabel bladeのループ内で使えるもの)で
重複しないものを出力するようにして下さい。

JSではaddEventlistenerで対象となる要素にonlickイベントを付与し、
クリックされた要素のid等を元にDOM操作します。

投稿2021/08/20 04:58

yuki84web

総合スコア1857

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

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

revoiot

2021/08/20 05:06

早速回答していただきありがとうございます。 >同じidはページ内に複数存在してはいけません。 このルールは調べて知っていて、同じページに同じidが存在しないように注意していましたが、 よく考えれば、ループ処理だと同じidが生成されることになるので、2回目のループでは重複するidに対してJS処理が行われれないということですね、、、 長い時間わからず悩んでいてたので、本当に助かりました。ありがとうございます。
m.ts10806

2021/08/20 05:38

補足的な内容なのでこちらにぶらさがらせていただきますが、 PHPおよびテンプレートのコードだけ見ていても把握しにくいのでブラウザに表示されるときに出力されたhtmlソースを確認するようにしてください。 JavascriptもCSSも結局は出力されたhtmlに対して処理が行われますので。
revoiot

2021/08/20 15:42

ご教示くださりありがとうございます! これからデバッグの際はdevtoolでhtmlソースならびにjsのコンソール画面で確認するようにしたいと思います。
revoiot

2021/08/21 13:10 編集

addEventlistenerを使って、無事に、コメント欄のオンオフの実装をすることできました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問