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

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

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

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

jQuery

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

Q&A

解決済

3回答

3866閲覧

if文の条件分岐がうまく動作しません

atsushi_m

総合スコア20

WordPress

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

jQuery

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

1グッド

0クリップ

投稿2018/09/12 16:05

編集2018/09/14 15:46

jQueryのif文について質問させていただきます。

wordpressを使ってWEBサイトを制作しております。
表示中のページのURLを取得し、ifを使って下記の内容で条件分岐をしようとしています。

1.トップページ以外の場合
2.トップページの場合

2度目のelse if以下の部分が機能しません。中身のスクロールの機能は単体で試すと動くのでelse ifのURL指定に原因があるのでは…と思ったのですが。

jquery

1jQuery(function($) { 2 var url = location.href; 3 if(url !== "http://example.com"){ // 現在のページがTOPページ以外なら 4 // URLにhttp://example.comを追加 5 $(".menu_ex a").each(function() { 6 var obj = jQuery(this); 7 var link = obj.attr("href"); 8 obj.attr("href","http://example.com"+link); 9 }); 10 // 708px以下の場合は単純に開始位置からスクロール 11 if (window.innerWidth <= 708){ 12 var id = url.split("#"); 13 var $target = $('#' + id[id.length - 1]); 14 var pos = $target.offset().top; 15 $("html, body").animate({scrollTop:pos}, 800); 16 } 17 // 709px以上の場合はヘッダー分をマイナスした位置に開始位置からスクロール 18 else if(window.innerWidth >= 709 ){ 19 var headerHight = $(".fix").outerHeight(); 20 var id = url.split("#"); 21 var $target = $('#' + id[id.length - 1]); 22 var pos = $target.offset().top - headerHight; 23 $("html, body").animate({scrollTop:pos}, 800); 24 } 25 26 // ※ここから機能しません 27 // TOPページの場合はクリックした位置からスクロール 28 }else if(url == "http://example.com"){ // 現在のページがTOPページなら 29 $('a[href^="#"]').click(function(){ 30 var href= $(this).attr("href"); 31 var target = $(href == "#" || href == "" ? 'html' : href); 32 var pos = target.offset().top; 33 $("html, body").animate({scrollTop:pos}, 600, "swing"); 34 return false; 35 }); 36 } 37});

HTML

1<div class="fix"> 2 <header id="aaa" class="aaa"> 3 <h1><a href="http://example.com"><img class="img" src="http://example.com/aaa.svg" alt=""/></a></h1> 4 <div id="globalNavi"> 5 <div id="navToggle"> 6 <div> 7 <span></span> <span></span> <span></span><span class="menu">MENU</span> 8 </div> 9 </div> 10 <nav> 11 <ul id="menu-navi" class="navi"> 12 <li id="menu-item-10" class="menu_fix"><a title="000" href="http://example.com/">000<span>000</span></a></li> 13 <li id="menu-item-11" class="menu_ex"><a title="aaa" href="#aaa">AAA<span>aaa</span></a></li> 14 <li id="menu-item-12" class="menu_ex"><a title="bbb" href="#bbb">BBB<span>bbb</span></a></li> 15 <li id="menu-item-13" class="menu_ex"><a title="ccc" href="#ccc">CCC<span>ccc</span></a></li> 16 <li id="menu-item-14" class="menu_ex"><a title="ddd" href="#ddd">DDD<span>ddd</span></a></li> 17 <li id="menu-item-15" class="menu_fix"><a title="000" href="http://example.com/eee/">000<span>000</span></a></li> 18 <li id="menu-item-16" class="menu_ex"><a title="eee" href="#eee">FFF<span>eee</span></a></li> 19 </ul> 20 </nav> 21 </div> 22 </header> 23</div>

動作確認はchrome(68/mac)とsafari(11.1.2/mac)で行なっております。

勉強中で初歩的なところで間違えているような気がするのですが、試行錯誤を繰り返しても一向にうまくいかないため相談させていただきました。
恐れ入りますが、アドバイスいただけましたら幸いです。よろしくお願いいたします。


※自己解決欄に入力すると「自己解決」扱いになりそうなので、こちらに解決の際のコードを追記いたします。

PHP

1// functions.phpに以下のコードを記載 2if ( !is_admin() ) { 3 function register_script() { 4 wp_register_script('scroll_1', get_template_directory_uri(). '/js/scroll_1.js'); 5 wp_register_script('scroll_2', get_template_directory_uri(). '/js/scroll_2.js'); 6 } 7 function add_script() { 8 // TOPページのみ 9 if (is_front_page()) { 10 wp_enqueue_script('scroll_1'); 11 // TOPページ以外 12 } elseif (!is_front_page()) { 13 wp_enqueue_script('scroll_2'); 14 } 15 } 16 add_action( 'wp_print_scripts', 'add_script' ); 17}
kei344👍を押しています

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

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

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

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

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

kei344

2018/09/12 16:23

書かれている状況が再現するコードを提示されたほうが回答を得やすいと思います。また、例示用ドメインはご自身で所有されていない限り example.com, example.jp, example.co.jp など例示用に予約されたドメイン名を利用してください。 http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html https://blog.jxck.io/entries/2017-09-27/example-local-test-domains.html https://blog.ko31.com/201304/sample-domain-example/
atsushi_m

2018/09/12 17:28

kei344様、アドバイスいただきありがとうございます。ドメインの件よくわかりました、このあたりのノウハウを知りませんでしたが、たしかに仰るとおりです。コードについても訂正いたしました。よろしければ改めてご覧いただけましたら幸いです。
m.ts10806

2018/09/13 00:10

「WordPress」もタグに追加しておいてください。これに限らずフレームワークやプラグイン、ライブラリなどを利用されている場合は、独自の仕組みを利用いていたりして、元々の言語知識だけでは対応できないことも多いです。具体的なタグをつけることでより専門的な技術や知識をもった回答者の目にとまりやすくなりますので、工夫してみてください。 https://teratail.com/tags
atsushi_m

2018/09/13 05:20

mts10806様、アドバイスいただきありがとうございます。いろいろ慣れておらず、アドバイスいただけてとても助かります!
guest

回答3

0

ベストアンサー

要件を満たせるか別として、トップページ等の判定ならWordPressの機能にあるのでそちらを使われた方がいいように思います。

投稿2018/09/13 00:12

m.ts10806

総合スコア80850

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

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

atsushi_m

2018/09/13 05:29

mts10806様 アドバイスに加えてご回答もいただき、ありがとうございます!たしかに…仰るとおりですね。jQueryを学び始めたこともあって固執しておりました。他の方に助言いただいた「デバッグ」を利用してうまくできなければ、PHPでの分岐にチャレンジしてみようと思います。 いろいろ勉強中につき少し時間がかかると思いますが、経過報告は改めてこちらでさせていただきます。取り急ぎお礼を申し上げます。
atsushi_m

2018/09/14 14:41

mts10806様 ご返信について時間が経ってしまい、大変失礼いたしました。 いろいろ時間がかかりましたが、アドバイスいただいた通りPHPを使ってページの判定を行い、ページごとに読み込むjqueryの出し分けができました。 この度は貴重なご助言をいただき、ありがとうございました! なお、当初の「jQueryだけで解決できないか」という点をもう少し取り組んでおります。ベストアンサーの選定については、申し訳ございませんがいましばらくお待ちくださいませ。 取り急ぎ現状の報告と御礼を申し上げます。
atsushi_m

2018/09/14 15:29

mts10806様 この度はアドバイスをいただき、改めて御礼申し上げます。おかげさまで目的通りのアウトプットができました、心から御礼申し上げます。 また本サイトでお力添えをお願いすることがありましたら、どうぞよろしくお願い申し上げます。 追伸:jQueryだけでの解決の方はまだ時間がかかりそうなため、自力でもう少し検証することにいたしました。
m.ts10806

2018/09/14 23:01

ひとまず、解決できたようで何よりです
guest

0

提示の条件文であれば、else if ではなく else で十分です。

条件分岐については console.log() を使って、どういう値がきているかを確認してみてください。

【Chrome DevToolsを使いこなそう! Web開発に必須なブラウザ開発ツールによるデバッグの基本 - エンジニアHub|若手Webエンジニアのキャリアを考える!】
https://employment.en-japan.com/engineerhub/entry/2017/05/30/110000

【簡単なブラウザの開発者ツールの説明(Chrome)】
https://qiita.com/takihiyoshi/items/95c9bde8b7b8bda86ce1

投稿2018/09/12 17:28

kei344

総合スコア69398

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

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

atsushi_m

2018/09/12 18:27

kei344様 夜分にも関わらず早々にご回答いただきありがとうございます! 仰る通りelseにして(url == "http://example.com")を省けばこれまでと同じ動作になりました。ただ、else以下の機能が効かない点は改善できませんでした… また、デバックについても参考サイトも添えてご教示いただき、ありがとうございます。デバッグについては「どんなものか」というのは理解できたのですが「どのように利用すればよいのか」という点が理解できず、そこでストップしていました。 まず教えていただいたサイトを拝見しつつ、きちんと理解できるように努めてみます!
atsushi_m

2018/09/14 14:31

kei344様 ご回答いただいてから時間が経ってしまい、大変失礼いたしました。 デバッグについて調べたり検証したり、といったことに時間がかかってしまいました。 結果ですが、いろいろ試したものの結局、後半のelse以下を機能させられませんでした… デバッグについて、いただいた記事や他のサイトなどを見つつ自分なりに試してみました。 具体的には、 }else{ 以下に console.log('true'); と入力し、elseが動作しているか確認した結果、chromeのデベロッパーツールで何も値が返らないので「動作していない」というところまでは確証を得られました。 ただ、どうすればそれが直るのか、ということがわからずでした。 そこで新たに疑問になったのが「デバッグの使い方は正しいのか」という点です。デバッグの方法次第で原因までわかるものでしょうか? (いつのまにか別の質問になってしまいました、、、ルール違反でしたら大変お手数ですがご指摘いただけたらと存じます。) 重ねての質問になり恐縮ですが、後学のためによろしければご回答いただけましたら幸いです。 どうぞよろしくお願いいたします。 追伸:別の方にアドバイスいただいたPHPでの条件分岐に成功したので、ひとまず当初の問題は解決できたのですが、jQueryだけでの分岐の方もあとちょっとのところまで来ている気がするので、勝手ながらどうにかできないかと思った次第です。
kei344

2018/09/14 14:39

console.log(url); if/*あと省略*/ とりあえず分岐で失敗したら、どこまでたどり着いているか(atsushi_mさんが試された方法です)、if文中の変数は期待通りに来ているか、比較演算子が自分の想像通りの挙動をしているかを確認することからはじめますね。 それ以外で言えば、出力されたHTMLに適切な状態で出力されているか(途中で切れていたりしないか)も確認します。何らかのエラーがある箇所以降が出力されないとか、閉じタグがおかしくなっている(タグの対応が取れていない)とかそういうことでも動かなくなることはあります。(例:<a><span></a></span>)
atsushi_m

2018/09/14 15:11

早速ご返信いただきありがとうございます! なるほど、デバッグの使い方としては「異常個所の特定を行うためのツールで、異常の原因はその部分の挙動によって推察する」という感じですね。 原因に対する処方は自分で考える、ただそれはよく考えれば当たり前のことですね…いつのまにかちょっと勘違いをしておりました。 問題自体はひとまず解決したので、本件については自力でもう少し粘って回答を探そうと思います。 なお誠に勝手ながら、ベストアンサーは現時点での解決方法についてアドバイスくださった別の方にさせていただこうと思いますが、度々ご丁寧で貴重なアドバイスをいただいたkei344様にも心から御礼申し上げます。本当にありがとうございました。 また当サイトでお力添えをお願いすることがありましたら、これに懲りずどうぞよろしくお願いいたします。
guest

0

http://aaa.com

こちらの最後にスラッシュ(/)を追加したら変わりませんか?
最初のifで「http://aaa.com/」条件にすれば、else ifでなくelseで済むとも思います。
(URL=○○以外、に当てはまらない場合はURL=○○だと思うので)

jQuery

1jQuery(function($) { 2 var url = location.href; 3 if(url !== "http://aaa.com/"){ // 現在のページがTOPページ以外なら 4 $(function() { 5 イベント1 6 }); 7 if { 8 イベント2 9 } 10 else if{ 11 イベント3 12 } 13 }else{ // 現在のページがTOPページなら 14 $(function(){ 15 イベント4 16 }); 17 } 18});

投稿2018/09/12 16:22

編集2018/09/12 16:23
Takumiboo

総合スコア2534

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

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

atsushi_m

2018/09/12 16:44

Takumiboo様 早速ご回答くださってありがとうございます! いただいたアドバイスの通り直してみましたが…改善されませんでした。教えていただいた通りelseでも元のelse ifでも試したのですが… なお、他の方から質問についてのアドバイスもいただいたので、イベント部分のコードもこれから再掲載させていただきます。もしよければ改めてご覧いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問