前提・実現したいこと 試したこと
現在laravelで掲示板アプリを作成しているlaravel初心者です。
PHPのfoeachループで回して表示されている掲示板の全ての投稿のコメント入力画面に、vanillaJSの絵文字機能を実装したいと考えております。
絵文字機能自体は表示させることには成功し、選択した絵文字の要素をgetElementsByIdで取得した場合は、コメント入力画面にも選択した絵文字を挿入させることができたのですが、
JSのループの中でgetElementsByClassNameで要素取得させたところ、すべての投稿のコメント入力画面で絵文字を選択しても、コメント入力フォームに挿入されないで困っています。
配列とオブジェクトの理解が足りておらず、この現象になっているかもしれませんが、その部分なども含めてアドバイス等いただけると幸いです。
発生している問題・エラーメッセージ
index.blade.php
php
1 2<input id="body" name="body" class="{form-control{{ $errors->has('body') ? 'is-invalid' : '' }}} emoji w-full focus:outline-none focus:placeholder-gray-400 text-gray-600 placeholder-gray-600 pl-12 bg-gray-200 rounded-full py-3 " value="{{ old('body') }}" type="text" placeholder="コメントを入力"> 3//input 4 5<button type="button" class="emoji-trigger inline-flex items-center justify-center rounded-full h-10 w-10 transition duration-500 ease-in-out text-gray-500 hover:bg-gray-300 focus:outline-none"></button> 6//
app.js
js
1//① node_modulesのモジュールをインポート 2import { EmojiButton } from '@joeattardi/emoji-button'; 3 4//② 要素取得など 5const picker = new EmojiButton(); 6var trigger = document.getElementsByClassName("emoji-trigger"); 7 8//③ 絵文字ボタンをクリックした後、絵文字選択画面を表示 9for(let i = 0; i < trigger.length; i ++){ 10 trigger[i].addEventListener('click',function(){ 11 picker.togglePicker(trigger[i]); 12 }) 13} 14 15//④ 絵文字選択画面で選択した絵文字をコメント入力画面に挿入(エラー箇所) 16const picker2 = [] // ②で要素取得したpickerをオブジェクトから配列に変換して処理 17for(var k = 0; k<10; k++){ 18 const p = new EmojiButton(); 19 picker2.push(p) 20} 21for(let i = 0; i < picker2.length; i ++){ 22 picker2[i].on('emoji',function(selection){ 23 var selectedemoji = selection.emoji; 24 document.getElementsByClassName('emoji').value += selectedemoji;}) // 選択した絵文字をコメント入力画面に挿入 25 26
絵文字ピッカーのイメージ画像
動作イメージ
コメント入力欄にある絵文字ボタンをクリック
→絵文字選択画面(ピッカー)が開く。
→選択画面から入力したい絵文字を選択する
→コメント入力画面に挿入される。
補足情報(FW/ツールのバージョンなど)
Laravel Framework 7.30.2
MySQL 8.0.21 Homebrew
PHP 7.4.14
Docker 19.03.13
Heroku 7.47.2
回答1件
あなたの回答
tips
プレビュー