間違った記事のせいで、間違った記事を読んだ人も、間違った結論を出してしまうパターンを発見しました。
間違った記事も、間違った記事を読んだ人も、app.js
のせいだと結論づけていますが、本当にそうでしょうか?
app.js
を読み込むと、jQuery
やjQuery UI
が動かないのか、試してみました。
jQuery UI
のautocomplete
を実装して失敗したと書いてあったので、autocomplete
を実装してみます。
Laravel UI
を使っているのが前提らしいので、インストールします。
使用環境
Name | Version |
---|---|
PHP | 8.1.7 |
Laravel | 9.17.0 |
Laravel UI | 3.4.6 |
Bootstrap | 5.1.3 |
jQuery | 3.6.0 |
jQuery UI | 1.13.1 |
node | v16.15.1 |
npm | 8.12.2 |
Laravel Mix | 6.0.49 |
実装例
views/layouts/app.blade.php
<head>
内
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css"> <!-- Scripts --> <script src="{{ asset('js/app.js') }}" defer></script> <script src="https://code.jquery.com/jquery-3.6.0.js"></script> <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.js"></script> <script> $(function () { var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ]; $("#tags").autocomplete({ source: availableTags }); }); </script>
<body>
内
<main class="py-4"> @yield('content') <div class="container py-4"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="ui-widget"> <label for="tags">Tags: </label> <input id="tags"> </div> </div> </div> </div> </main>
結果
問題なく動いています。
結論
参考にするべき記事
おそらく、Laravel 6
(厳密に言うとLaravel UI 1.0)だと、Bootstrap 4
が使われていて、Bootstrap 4
はjQuery
を使っています。
jQuery
やjQuery UI
をLaravel Mix
で使うための記述をしていないのが原因。
念の為、下記の手順通り作業して、app.js
を読み込んで、動作確認しました。
npm i jquery && npm i jquery-ui
<head>
内、JavaScript
のCDN
の読み込み箇所は削除bootstrap.js
を、下記のように記述npm run dev
bootstrap.js
内
try { window.$ = window.jQuery = require('jquery'); require('jquery-ui/ui/widgets/autocomplete.js'); require('bootstrap'); } catch (e) {}
私が試したLaravel 9
だと、Bootsrap 5
が採用され、Bootstrap 5
は、jQuery
を使っていないから、すんなり使えたのだと思います。
思わず釣られてマジレスしちゃったけど、冷静になったら、マジレスする価値ないと思って、削除しました。
間違った記事で、安易に間違った解釈をしないように、私自身も気をつけたいと思います。