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

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

解決済

2回答

1175閲覧

WordPressで、jsファイルの内容が反映されない

bglhk8447755

総合スコア3

WordPress

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

JavaScript

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

jQuery

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

0グッド

2クリップ

投稿2022/05/10 14:59

編集2022/05/14 03:58

静的なサイトをWordPress化させることをしています。
そこで、自作のjsファイルの内容が反映されずに悩んでいます。

ちなみに、ディベロッパーツールで見てみると、
ファイル自体は正しく読み込まれているようです。

おそらく原因として考えているのが、ファイルの記述にエラーの表示があることです。
Uncaught TypeError: Cannot read properties of undefined (reading 'top')
という文がありました。

調べてみた結果、「top」の内容が見つからないという意味なのかなと思ったのですが、どこを改善したら良いかわからず質問させていただきました。

また、このような記述エラーがあるだけでWordPressにjsファイルの内容が反映されないことがあるのでしょうか。
もし何かご存知の方がおみえでしたら教えていただきたいです。

イメージ説明

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

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

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

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

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

penguin520

2022/05/10 15:21

似たようなエラーをいまやっています。 .offset() が定義されていないので .top につながらないよというエラーだと思います。
bglhk8447755

2022/05/14 04:15

ありがとうございます!! 静的サイトではエラーにならなかったのですが。。 原因を調べてみたいと思います。
guest

回答2

0

ベストアンサー

おそらくドキュメントの読み込みが完了する前に取得しようとしていることが原因ではないでしょうか。
ドキュメントは上から実行されていくので、グローバルメニューがまだレンダリングされていない状態で位置を取得しようとするとグローバルメニュー自体が見つからず、そのプロパティは見つからないと言われます。

8行目・9行目をwindow.onload = function() {...}$(document).ready(function() {...}の中に入れ込んで、HTMLドキュメントの読み込みが完了したときに実行する必要があるかと思います。
試してみてください。

解決できれば幸いです。

投稿2022/05/11 00:03

koji

総合スコア111

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

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

penguin520

2022/05/12 13:03

参考にさせていただきました。助かりました、ありがとうございます。
koji

2022/05/12 15:02

お役に立てて何よりです。mm
bglhk8447755

2022/05/14 04:01

すみません、初歩的な質問で申し訳ないのですが 8行目・9行目の部分を以下のようにwindow.onload = function() {...}で囲う、ということで合っていますでしょうか。 window.onload = function() { var navPos = jQuery('#global-nav').offset().top; // グローバルメニューの位置 var navHeight = jQuery('#global-nav').outerHeight(); // グローバルメニューの高さ }
bglhk8447755

2022/05/14 04:13

また重ね重ね質問して申し訳ないのですが、 静的サイトではエラーなくjsは動いていました。 今回初めて静的サイトからWordPress化させているのですが、 皆さん、WordPress化させる時は毎回このようにjsを編集されているのですか?
koji

2022/05/14 05:06

window.onload = function() {...}で囲う方法についてそれで間違いありませんが、 すみません、訂正させてください。 8・9行目だけでなくjQuery(window).on('scroll' ...も含めた全てを一緒に囲ったほうがいいです。 window.onload = function() { var navPos = jQuery('#global-nav').offset().top; // グローバルメニューの位置 var navHeight = jQuery('#global-nav').outerHeight(); // グローバルメニューの高さ jQuery(window).on('scroll', function() { if(jQuery(this).scrollTop() > navPos) { jQuery('body').css('padding-top', navHeight); jQuery('#global-nav').addClass('m_fixed'); jQuery('#scroll-nav').addClass('m_space'); } else { jQuery('body').css('padding-top', 0); jQuery('#global-nav').removeClass('m_fixed'); jQuery('#scroll-nav').removeClass('m_space'); } }); } 流れを確認しておくと ドキュメント読み込み完了→グローバルメニューの位置と高さ取得→ウィンドウスクロールのイベント追加 という流れになります。 静的サイトではエラーがなかったとのことですが、すみません、原因が分かりません。 こちらでやってみたところやはりエラーが出ました。(EdgeでもChromeでも) 通常はエラーが発生するほうが正しいと思います。 WordPressを使ってるかどうかに関係なく、このような手法を取ります。
bglhk8447755

2022/05/14 08:07

ご丁寧な解説をありがとうございます。 先程実践してみたところ、エラーが解消されました! 本当にありがとうございます!
koji

2022/05/14 08:13

お役に立てて良かったです。
guest

0

同じようなエラーが出ていたのですが、こちらは解決しました。
ご質問のケースの場合 ('#global-nav') の部分で値を取得できていないことによるエラーでの可能性がかなり高いです。
実際のページ

HTML

1 2<div id="mw_wp_form_mw-wp-form-1222" class="mw_wp_form mw_wp_form_input "> 3 <form method="post" action="" enctype="multipart/form-data"><p> 4<textarea name="name" cols="50" rows="1" >名前</textarea> 5</p> 6<p> 7<input type="email" name="mail" size="60" value="メールアドレス" /> 8</p> 9<p> 10<input type="text" name="text" size="60" maxlength="2000" value="問い合わせ内容" /> 11</p> 12<p> 13<button type="submit" name="button" value="send" class="button">送信する</button> 14</p> 15<input type="hidden" id="mw_wp_form_token" name="mw_wp_form_token" value="a1166c7a6f" /><input type="hidden" name="_wp_http_referer" value="/contact/" /><input type="hidden" name="mw-wp-form-form-id" value="1222" /><input type="hidden" name="mw-wp-form-form-verify-token" value="431ae769fc8379f5e0b24b990bca066c9a055856" /></form> 16 <!-- end .mw_wp_form --></div> 17 18 19 20<input id="antibot" type="text" value="パスフレーズを入力" name="antibot"><br> 21<p>BOT対策のため、パスフレーズを入力に 4649 と入力してください</p> 22<div>

失敗したコード

javaSprict

1<script> 2var hoge = document.getElementById('antibot'); 3var xyz= hoge.getAttribute('value'); 4window.onload = function(){ 5 //1000ミリ秒(1秒)毎に関数を呼び出す 6 setInterval(antibot, 1000); 7} 8function antibot(){ 9 if(xyz == "4649"){document.document.getElementsByClassName("button").style.cssText = 'display:inline-block !important';} 10 else{document.getElementsByClassName("button").style.cssText = 'display:none !important';;} 11} 12</script>

成功したコード

javaSprict

1<script> 2var hoge; 3var xyz; 4var abc; 5window.onload = function(){ 6 //1000ミリ秒(1秒)毎に関数を呼び出す 7 setInterval(antibot, 1000); 8} 9function antibot(){ 10 hoge = document.getElementById('antibot'); 11 xyz = hoge.getAttribute('value'); 12 abc = document.getElementsByClassName("button"); 13 if(xyz == "4649"){abc[0].style.cssText = 'display:inline-block !important';} 14 else{abc[0].style.cssText = 'display:none !important';;} 15} 16</script>

投稿2022/05/12 13:03

penguin520

総合スコア345

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

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

penguin520

2022/05/12 13:17

全然別の問題で、このままだと、4649のパスフレーズを入力してもボタンが表示されないので、別で質問を立てます。
koji

2022/05/12 15:02

別で立てられたご質問のほうも含めて解決されたようで良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問