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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

1233閲覧

WordPressで、JSで2回目のconstを宣言した場合、そのJSファイルが読み込まれなくなる。なぜ?

ogyougi

総合スコア60

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/12/28 09:46

編集2019/12/28 13:19

###質問
WordPressで、JSで2回目のconstを宣言した場合、そのJSファイルが読み込まれなくなります。
これがなぜか理由をお聞きしたいです。

###発生している問題
以下「functions.php」で「ok.js」と「test.js」を読み込ませたいのですが、「test.js」だけが読み込まれません。

「functions.php」

php

1add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' ); 2function my_enqueue_scripts(){ 3 4 $template_directory_uri = get_template_directory_uri(); 5 6 // 読み込まれる 7 wp_enqueue_script( 'ok.js', $template_directory_uri . '/js/ok.js', array(), '1.0.0', true ); 8 9 // 読み込まれない 10 wp_enqueue_script( 'test.js', $template_directory_uri . '/js/test.js', array(), '1.0.0', true ); 11 12}

下記が「test.js」です。

js

1(function($){ 2 3 $(document).on('click','.button', function(){ 4 5 const item = $(this).closest('.item'); 6 7 const item = $(this).closest('.item'); 8 9 }); 10 11})(jQuery);

###再現条件
なんで読み込まれいのか、数時間かけてやっと「2回目のconstを宣言した場合」という再現条件にたどりつきました。つまり上の「test.js」です。

これはどうしてですか?

2回目のconstがエラーになるのは当然として、ならばファイルを読み込んでから「const2回宣言してますよ」というエラーを出せばいいでしょ!と思います。

そのように「読み込んでからエラーを出す」という仕様にせず、「そもそも読み込まなくする」という仕様に、どんなメリットがあるののでしょうか。

エラーも出ないためにこの再現条件を見つけるのに本当に苦労しましたので、明らかにデメリットを大きく感じております。

###補足(ブラウザによる違い)
ご報告です。エラーがでずファイルの読み込みもないのはFirefoxでの場合だけでして、Chromeでは下記エラーが無事出ました。

test.js:7 Uncaught SyntaxError: Identifier 'item' has already been declared

###補足(全ファイル)
全てのファイルの【ディレクトリ】と【中身】は下記です。(親テーマでも一緒ですがわかりやすいので子テーマにします)

プラグイン等が無いまっさらなWordPress(最新の5.0.3)に入れて、Firefoxでお試しいただければ再現するかと思います。

【ディレクトリ】

twentynineteen-child ├ functions.php ├ style.css ├ js  ├ test.js  ├ ok.js

【中身】

「functions.php」

php

1<?php 2add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); 3function theme_enqueue_styles() { 4 wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); 5 6} 7 8add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' ); 9function my_enqueue_scripts(){ 10 11 $template_directory_uri = 'http://example.com/wp-content/themes/twentynineteen-child'; 12 13 // 読み込まれる 14 wp_enqueue_script( 'ok.js', $template_directory_uri . '/js/ok.js', array(), '1.0.0', true ); 15 16 // 読み込まれない 17 wp_enqueue_script( 'test.js', $template_directory_uri . '/js/test.js', array(), '1.0.0', true ); 18 19}

「style.css」

css

1/* 2Theme Name: twentynineteen child 3Template: twentynineteen 4*/

「test.js」

js

1(function($){ 2 3 $(document).on('click','.button', function(e){ 4 5 const item = $(this).closest('.item'); 6 7 const item = $(this).closest('.item'); 8 9 }); 10 11 12})(jQuery);

「ok.js」

js

1console.log('this is ok.js');

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

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

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

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

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

CHERRY

2019/12/28 10:38

読み込まないという症状のどの様に確認したのか記載していただけないでしょうか? 読み込まないというのは、Web ブラウザのデベロッパーツールで、test.js のファイル名が見つからないということでよろしいですか? Web ブラウザ デベロッパーツールのコンソールでは、どの様なメッセージが出ていますか?
maisumakun

2019/12/28 10:43

「エラーも出ない」とありますが、それはどのように確認しましたでしょうか?
ogyougi

2019/12/28 11:18

CHERRYさんへ >読み込まないというのは、Web ブラウザのデベロッパーツールで、test.js のファイル名が見つからないということでよろしいですか? 仰る通りです。 >Web ブラウザ デベロッパーツールのコンソールでは、どの様なメッセージが出ていますか? コンソールにエラーは出ないのです。(上で仰るのように test.js のファイルが見つからず、つまり読み込まれていないために、そのファイルでconstが2回宣言されているという判定もされないためだと思っています。)
ogyougi

2019/12/28 11:22 編集

maisumakunさんへ >「エラーも出ない」とありますが、それはどのように確認しましたでしょうか? Web ブラウザのデベロッパーツール(F12)のコンソール画面で確認致しました。他に確認方法を知らないのでもしご存じでしたら教えて頂けますと幸いです。
ogyougi

2019/12/28 11:53 編集

お二人へ 失礼致しました。訂正がございます。「エラーが出ない」と言いましたが、「constが2回宣言されていること」のエラーがでないだけであって、コンソールには下記の「メッセージ」の表示がございました。Firefixです。(なお、「browser-polyfill.js」なるものは使用の心当たりがないです。) 「メッセージ」 JQMIGRATE: Migrate is installed, version 1.4.1 ソースマップエラー: Error: NetworkError when attempting to fetch resource. リソース URL: moz-extension://ee0b5a9b-280c-46ae-ac02-9dfcbe67f213/node_modules/webextension-polyfill/dist/browser-polyfill.js ソースマップ URL: browser-polyfill.js.map
maisumakun

2019/12/28 11:39

JavaScriptの変換・最適化を行うようなWordPressプラグインは入れていませんか?
ogyougi

2019/12/28 13:33 編集

maisumakunさんへ >JavaScriptの変換・最適化を行うようなWordPressプラグインは入れていませんか? いえ、プラグインなしです。再現できませんか?
CHERRY

2019/12/28 12:00

うーん。Twenty Nineteen と Twenty Seventeen で試してみましたが、再現しないですねぇ... ok.js も test.js も読み込まれて、test.js で、「SyntaxError: Cannot declare a const variable twice: 'item'.」のエラーがでます。 ところで、お使いのテーマは何をお使いでしょうか?
ogyougi

2019/12/28 13:33 編集

CHERRYさんへ オリジナルテーマでしたが、こちらでもTwenty Nineteenで試したところ、やはり再現しました。 ただ、気づいた点がございます。Chromeだと(CHERRYさんのエラーとは違いますが)「test.js:7 Uncaught SyntaxError: Identifier 'item' has already been declared」のエラーが出るのです。 Firefoxだといかがですか?エラー出ず、test.jsは開発ツールから確認できなくないですか??
CHERRY

2019/12/28 14:05 編集

Mac 版 Firefox だと 問題ないですね。 コンソールに > this is ok.js ok.js:10:9 > SyntaxError: redeclaration of const item > test.js:16:14note: Previously declared at line 14, column 14test.js:14:14 と ok.js と test.js のどちらも実行している様子が出ています。 もしかすると OS や Firefox のバージョンなどに依存しているのかもしれません。( 確認したのは、Mac 版 71.0 ) 一応、firefox でのコンソール画像。(画像のアップロードをこんな使い方していいのかしらん... ) https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7ede284e7986c161b005504c7fc74312.png
think49

2019/12/28 14:07

コンソールの出力ログ設定がオフになってないですかね…。
ogyougi

2019/12/28 14:08

CHERRYさんへ そんなことあるんですね。こちらはwin10でmacは持ち合わせがなく検証できないのですが、うーん、もやもやしますね。
ogyougi

2019/12/28 14:11

think49さんへ すみません「コンソールの出力ログ設定」とはなんでしょうか?検索しでも出ませんで、もしよかったら教えてください。ちなみに「this is ok.js」はコンソールに出ます。
think49

2019/12/28 14:59 編集

コンソールには、出力されるログをタイプ別に絞り込む機能があります。 CHERRYさんがUPした画像の右側にある [エラー], [警告], [ログ],...etcがそれでオフになっているログは出力されません。 全てのオプションをオンにして、該当エラーが出力されるのなら、その設定が原因です。
ogyougi

2019/12/28 15:19

think49さんへ おおおそれでした! [エラー]の項目がグレーでなくホワイトで、[エラー(1)]となっておりました。 それをクリックしたら[エラー]の項目はグレーになり、CHERRYさんと同じようなconstについてのエラーが表示されました。 どうもありがとうございます。
guest

回答1

0

自己解決

think49さんのアドバイスで解決致しました。

開発ツールの右上にある[エラー], [警告], [ログ],...etcのうち[エラー]がオフになっており、そのせいでエラーが表示されないという原因でした。

CHERRYさん、maisumakunさん、そしてthink49さん、どうもありがとうございました!

投稿2019/12/28 15:21

ogyougi

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問