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

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

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

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

JavaScript

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

Q&A

解決済

1回答

931閲覧

Laravel WYSIWYGエディタ(Quilljs) 投稿に失敗するとエディタに入力した内容が消えてしまう。

tkm0604

総合スコア552

Laravel

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

JavaScript

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

0グッド

0クリップ

投稿2022/08/10 07:08

Laravel9 にWYSIWYGエディタ(Quilljs) を実装しました。

WYSIWYGエディタ(Quilljs)の内容をDBに保存する事は出来ました。
しかし、inputタグ「タイトル」未入力で投稿に失敗すると、WYSIWYGエディタ(Quilljs)の内容が消えてしまいます。

PHP

1///form.blade.php 2 3<form name="ansform" class="info-edit" method="post" action="{{ route('post.store') }}" enctype="multipart/form-data"> 4 @csrf 5 <div class="info-edit__headding"> 6 <label class="info-edit__headding--title" for="title">タイトル</label> 7 <input class="info-edit__headding--input" type="text" name="title" id="title" value="{{ old('title') }}"> 8 </div> 9 <div class="info-edit__body"> 10 <label class="info-edit__body--title" for="body">本文</label> 11 <div class="info-edit__body--txt-area" id="quill-editor_1"> </div> 12 <input type="hidden" name="body" value="{{ old('body') }}"> 13 </div> 14 <div class="info-edit__button"> 15 <button class="info-edit__button--submit" type="submit" name="subbtn"> 16 保存 17 </button> 18 </div> 19</form>

app.js

1var quill_1 = QuillEditorMake('quill-editor_1'); 2 3function QuillEditorMake(make_id) { 4 var toolbarOptions; // ツールバーの機能設定 5 var quill; // エディタ情報 6 var themes = set_themes(); // エディタのテーマ(snow , bubble) 7 8 // ツールバー機能の設定 9 toolbarOptions = [ 10 //見出し 11 [ 12 { 13 header: [1, 2, 3, 4, 5, 6, false], 14 }, 15 ], 16 //フォント種類 17 [ 18 { 19 font: [], 20 }, 21 ], 22 //文字寄せ 23 [ 24 { 25 align: [], 26 }, 27 ], 28 //太字、斜め、アンダーバー 29 ['bold', 'italic', 'underline'], 30 //文字色 31 [ 32 { 33 color: ['red', 'blue', 'navy'], 34 }, 35 //文字背景色 36 { 37 background: [], 38 }, 39 ], 40 // リスト 41 [ 42 { 43 list: 'ordered', 44 }, 45 { 46 list: 'bullet', 47 }, 48 ], 49 //インデント 50 [ 51 { 52 indent: '-1', 53 }, 54 { 55 indent: '+1', 56 }, 57 ], 58 //画像挿入 59 ['image'], 60 //動画 61 ['video'], 62 //数式 63 ['formula'], 64 //URLリンク 65 ['link'], 66 ]; 67 68 //渡ってきたID名に「#」をくっつける 69 make_id = '#' + make_id; 70 71 //エディタの情報を生成 72 quill = new Quill(make_id, { 73 modules: { 74 //ツールバーの設定 75 toolbar: toolbarOptions, 76 }, 77 placeholder: '入力してください', 78 //ツールバーのあるデザイン 79 theme: themes, //'snow' or 'bubble' 80 }); 81 82 return quill; 83} 84 85 86// テーマ設定(PCとスマホで切り替える画面幅で判定) 87function set_themes() { 88 var themes; 89 if (window.parent.screen.width > 800) { 90 themes = 'snow'; 91 } else { 92 themes = 'bubble'; 93 } 94 return themes; 95} 96 97//フォームを送信処理 98document.ansform.subbtn.addEventListener('click', function () { 99 // Quillのデータをinputに代入 100 document.querySelector('input[name=body]').value = document.querySelector('#quill-editor_1').innerHTML; 101 // 送信 102 document.ansform.submit(); 103});

form.blade.phpで<input type="hidden" name="body" value="{{ old('body') }}">とすれば、投稿に失敗しても情報が渡されるかと思ったのでがだめでした。

投稿に失敗してもWYSIWYGエディタ(Quilljs) の情報を残す方法を教えてください。

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

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

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

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

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

guest

回答1

0

自己解決

以下のように入力情報をリロード時でも保持できるようにname="body_delta"を持つinputを作成。
DBにbody_deltaカラム(Json)を作成。

blade.php

1<div class="info-edit__body--txt-area" id="quill-editor_1"></div> 2 <input type="hidden" name="body" value="{{ old('body') }}"> 3 <input type="hidden" name="body_delta" value="{{ old('body_delta') }}">

jsファイルに以下のようにbody_deltaの値をセットするコードを記述。

app.js

1 // QuillのJSONデータ(Delta)をinputにセットする 2 bodyDelta.value = JSON.stringify(quill_1.getContents());

以上でLaravel WYSIWYGエディタ(Quilljs) 投稿に失敗するとエディタに入力した内容が消えてしまう。問題解決しました。

投稿2022/08/16 07:33

tkm0604

総合スコア552

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問