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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

1回答

2208閲覧

DatePickerに初期値を設定するとエラーで動かない

misskabu

総合スコア28

Laravel

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2020/11/07 13:37

編集2020/11/07 14:01

開発環境
MacOS Catalina
ブラウザ Chrome
Laravel 5.5.50
PHP 7.3.11
bootstrap4.3.1

Laravelとbootstarp4でdatepickerを使用したアプリケーションを作成しております。

新規作成フォームではdatepickerを期待通りに動作できましたので、
同じ要領で編集フォームに実装したところ以下のエラーがログに出力され、値を変更できなくなってしまいました。
ライブラリがバグって関数を再帰呼び出しする無限ループを引き起こしているようです。
イメージ説明

使用中のライブラリ
一番下の行のtempusdominus-bootstrap-4.min.jsがdatepickerのようでここが一番怪しいです。
一番上のajaxzip3.jsは郵便番号から住所検索するためのライブラリです。

HTML

1 <script src="{{url('/js/ajaxzip3.js')}}" charset="UTF-8"></script> 2 <script src="https://use.fontawesome.com/releases/v5.7.2/js/all.js" integrity="sha384-0pzryjIRos8mFBWMzSSZApWtPl/5++eIfzYmTgBBmXYdhvxPc+XcFEk+zJwDgWbP" crossorigin="anonymous"></script> 3 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 4 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> 5 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> 6 <script src="https://use.fontawesome.com/releases/v5.7.2/js/all.js" integrity="sha384-0pzryjIRos8mFBWMzSSZApWtPl/5++eIfzYmTgBBmXYdhvxPc+XcFEk+zJwDgWbP" crossorigin="anonymous"></script> 7 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> 8 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/ja.js"></script> 9 <script src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.1.2/js/tempusdominus-bootstrap-4.min.js"></script>

html

1<input type="text" class="form-control datetimepicker-input" 2id="birthday" data-toggle="datetimepicker" data-target="#birthday" name="birthday" value="{{ old('birthday') }}" /> 3

上記タグで value属性がない場合は正常に動作することを確認できております。

このoldに渡されている値をdd($request->birthday)として確認すると
"1985-06-28"
という期待通りの値が入っているのですが、
いざブラウザで表示させると
datepickerが一瞬その値が表示された後、強制的に以下の写真のように上書きしてきます。
また、この状態ではピッカーは表示されず、値を手動で変えることもできません。
イメージ説明

オプションのフォーマットはYYYY-MM-DDですので無視されてしまっています。

javascript

1<script type="text/javascript"> 2 $(function () { 3 $('#birthday').datetimepicker({ 4 format: 'YYYY-MM-DD', 5 locale: 'ja', 6 dayViewHeaderFormat: 'YYYY年 MMM', 7 }); 8 }); 9 10</script>

どなたか解決法をご存知ないでしょうか?

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

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

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

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

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

tomomo

2020/11/07 13:48

自分も昔似たようなのがあり、それはそのライブラリ自体の不具合で修正パッチ的なのを追記した記憶があったりします。 datepickerもいろいろなライブラリがあるので詳細をもっと書いた方が解答つくやもかもしれません。。。
misskabu

2020/11/07 14:05

tomomoさん。 コメントありがとうございます。 header部を追記いたしました。 ライブラリの問題の可能性があるとわかっただけでも収穫でした。 最悪別のライブラリを考えるなりします。
guest

回答1

0

ベストアンサー

tempusdominus-bootstrap-4ナンタラとかいうのなら心当たりあります。
エラー内容までは覚えてないのでハズれてるかもしれないけど、このライブラリ、バグあってそのまま使えなかったような。
fixme.jsってのを差し込んで自分は回避しました。

html

1: 2<script src="/vendor/tempusdominus-bootstrap-4-5.1.2/build/js/tempusdominus-bootstrap-4.min.js"></script> 3<script src="/assets/js/fixme.js"></script> 4:

fixme.js

javascript

1 2"use strict"; 3 4// @FIXME tempusdominus-bootstrap-4.min.js 5.1.2, 5.1.3 5$.fn.datetimepicker.Constructor.prototype._origSetValue = $.fn.datetimepicker.Constructor.prototype._setValue; 6$.fn.datetimepicker.Constructor.prototype._setValue = function _setValue(targetMoment, index) { 7 var oldDate = this.unset ? null : this._dates[index]; 8 var outpValue = ''; 9 if (!targetMoment && (!this._options.allowMultidate || this._dates.length === 1)) { 10 this.unset = true; 11 this._dates = [this.getMoment()]; 12 this._datesFormatted = []; 13 this._viewDate = this.getMoment().locale(this._options.locale).clone(); 14 if (this.input !== undefined) { 15 this.input.val(''); 16 this.input.trigger('input'); 17 } 18 this._element.data('date', outpValue); 19 this._notifyEvent({ 20 type: jQuery.fn.datetimepicker.Constructor.Event.CHANGE, 21 date: false, 22 oldDate: oldDate 23 }); 24 this._update(); 25 } 26 else 27 { 28 this._origSetValue(targetMoment, index); 29 } 30};

投稿2020/11/07 14:11

編集2020/11/07 14:13
tomomo

総合スコア430

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

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

misskabu

2020/11/07 15:43

残念ながらいただいたパッチを読み込んでも動作は変わりませんでした。 私の環境に問題がある可能性もあります。 ただ親切にお付き合いいただいて、ソースまで提供いただき、また他の回答者もおられませんので、 ベストアンサーとさせていただきます。 情報提供、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問