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

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

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

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

Q&A

解決済

1回答

2434閲覧

select boxのchangeに反応して発火するモーダルウィンドウについて

HirakuMorishima

総合スコア29

jQuery

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

0グッド

0クリップ

投稿2019/06/27 00:51

編集2019/06/30 01:09

select boxを選ぶとjQueryによってモーダルウィンドウが発火するというイベントを実行すると、「何も反応しない」という問題で困っています。

原因または解決策をご存知の方はいらっしゃいませんか。

私の行った手順は以下です。
(1)「#modal01」というidを持つselect boxを用意した
(2) #modal01というidを持つselect boxの中身が変わったら、jQueryでモーダルウィンドウが表示されるようにした

しかし、実際にselect boxの中身を変えてみても、設定したmodalウィンドウが発火しません。

私はモーダルウィンドウが動くと思いました。
なぜなら、【参考資料】には、
以下のように書かれているからです。

Bind an event handler to the “change” JavaScript event, or trigger that event on an element.

原因を確かめるため、いくつか試行錯誤を繰り返し行ってみましたが、
問題の解決には至りませんでした。

なお、私の環境は以下の通りです。
【MacBook Air (13-inch, Early 2015), 8 GB 1600 MHz DDR3, macOS Mojave 10.14.5, AWS, Laravel5.8.21】

検索エンジンでjQueryのchangeイベントハンドラを使ってモーダルウィンドウを発火させる方法を検索しましたが、
clickイベントでモーダルウィンドウを発火させる機能に関するページばかりで、解決に役立つ情報は見つかりませんでした。

##解決に至ったコード
●items.blade.php

php

1 <table class="highlight centered"> 2 <thead> 3 <tr> 4 <th>案件名</th> 5 <th>納期</th> 6 <th>単価</th> 7 <th>ステータス</th> 8 <th>メモ</th> 9 <th>編集・削除</th> 10 </tr> 11 </thead> 12 <tbody> 13 <!--変数化して、formsのindex番号を割り振るための$index--> 14 <?php $index = 0; ?> 15 @foreach($list as $val) 16 <tr> 17 <th>{{$val->item_name}}</th> 18 <th>{{$val->delivery_date}}</th> 19 <th>{{$val->unit_price}}円</th> 20 <th> 21 <form method="POST" action="/updateItemStates/{{$val->id}}" id="states_form"> 22 {{csrf_field()}} 23 <div class="input-field col s12"> 24 <select id="states" class="select" name="states" onchange="modalOpen{{$val->id}}()"> 25 <option value="1" {{$val->states == '1' ? 'selected' : ""}}>未執筆</option> 26 <option value="2" {{$val->states == '2' ? 'selected' : ""}}>請求書挿入</option> 27 </select> 28 <label for="states">ステータス</label> 29 </div> 30 </form> 31 <script> 32 function modalOpen{{$val->id}}() { 33 //alert(document.forms[{{$loop->index - 1}}].states.selectedIndex); 34 if(document.forms[{{$index}}].states.selectedIndex==1){ 35 //document.getElementById('states').selectedIndex 36 document.modal_form.item_id.value = '{{$val->id}}'; 37 $('#modal01').modal('open'); 38 } 39 } 40 </script> 41 <?php $index ++; ?> 42 </th> 43 <th>{{$val->memo}}</th> 44 <th><a href="/editItem/{{$val->id}}">管理画面</a></th> 45 </tr> 46 @endforeach 47 </tbody> 48 </table> 49 </div> 50 </div> 51 52 <!--請求書選択モーダル--> 53 <div class="modal" id="modal01"> 54 <div class="overLay modalClose"></div> 55 <div class="inner"> 56 {{Form::open(['url' => 'addInvoice', 'id' => 'modal_select', 'name' => 'modal_form' ])}} 57 {{ csrf_field() }} 58 <select name="invoice_id" class="select" onchange="submit(this.form)"> 59 @foreach($invoiceList as $val) 60 <option value="{{$val->id}}">{{$val->invoice_title}}</option> 61 @endforeach 62 </select> 63 <label for="client_id">登録先の請求書</label> 64 <button type="submit" class="btn btn-primary">請求書へ挿入</button> 65 {{Form::hidden('item_id', '')}} 66 {{Form::hidden('states', '2')}} 67 {{Form::hidden('client_id', $client->id)}} 68 @foreach($list as $val) 69 {{Form::hidden('item_name', $val->item_name)}} 70 {{Form::hidden('bill_unit_price', $val->unit_price)}} 71 @endforeach 72 {{Form::close()}} 73 <a href="" class="modalClose">Close</a> 74 </div> 75 </div>

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

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

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

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

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

m.ts10806

2019/06/27 00:57

タグ「jQuery」で回答を得たいのでしたらLaravel Blade要素は排除されて、画面出力されたHTMLをそのまま提示されたほうが良いかと思います。
m.ts10806

2019/06/27 00:59

あとモーダルはMaterializeのものをお使いでしたらタグを追加しておいてください。
guest

回答1

0

ベストアンサー

jQueryが1.11.2と3.3.1の2つ導入されていますがこれはバグの元です。1つにしましょう。
何か特別な理由がない限りより新しいものだけで良いと思います。

あとはもっと最小構成のコードで試されたほうが良いですね。
ある程度出来上がったものに組み込むのって問題切り分けを困難にしますから。
部品で試してから組み込むやり方が望ましいです。

気になるのはselectタグに全て.selectクラスをつけていることでしょうか。
CSSフレームワークを使っていて「ここのセレクトだけ当てない」ということはないでしょうから、
クラス指定ではなくタグ指定でinitializeかけたほうが良いと思います。

ほぼ最小構成のコード

Materializeで組まれているのですからMaterializeの機能を使おうということで。
jQuery読まれているのでjQueryの記法に合わせています。
クローズは.modalCloseをあたえれば何とかしてくれるので実装不要です。

html

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> 7 <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 8 </head> 9 <body> 10 <form method="POST" action="/updateItemStates/1" id="states_form"> 11 <div class="input-field col s12"> 12 <select id="states" class="select" name="states"> 13 <option value="1">未執筆</option> 14 <option value="2">請求書挿入</option> 15 </select> 16 <label for="states">ステータス</label> 17 </div> 18 </form> 19 <div class="modal" id="modal01"> 20 <div class="overLay modalClose"></div> 21 <div class="inner"> 22 <form> 23 <select class="select" onchange="submit(this.form)"> 24 <option value="1">タイトル1</option> 25 <option value="2">タイトル2</option> 26 </select> 27 <label for="client_id">登録先の請求書</label> 28 <button class="btn btn-primary">請求書へ挿入</button> 29 </form> 30 <a href="" class="modalClose">Close</a> 31 </div> 32 </div> 33<script 34 src="https://code.jquery.com/jquery-3.4.1.min.js" 35 integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" 36 crossorigin="anonymous"></script> 37<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> 38<script> 39$(function(){ 40 $('select').formSelect(); 41 $('.modal').modal(); 42 43 $('#states').on('change',function(){ 44 $('#modal01').modal('open'); 45 }); 46}); 47</script> 48 </body> 49</html>

投稿2019/06/27 01:09

編集2019/06/27 01:21
m.ts10806

総合スコア80842

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

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

HirakuMorishima

2019/06/30 01:07

ご回答ありがとうございます。 また最小限のコードについても非常に参考となりました。
m.ts10806

2019/06/30 01:11

ヒントになったようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問