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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2367閲覧

jQuery $(elm).click()の挙動がおかしい

Tats.N

総合スコア62

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/02/12 19:28

こんにちは。いつもありがとうございます。
jQueryの挙動でわからないことがあるので質問させていただきました。
###前提・実現したいこと
1つのHTMLをjsで複数のページに見せるように作っているのですが、routerなどを使っていないため、戻るボタンをページ内に作りました。
大まかな構造としては、

Home > Gallery > Content

の三層に分かれています。
GalleryとContentページに戻るボタンを配置しており、それらの要素は同じ#backのついたdivです。
###発生している問題・エラーメッセージ
その#backを押されたら現在表示されているページによってifで別の動作をするようにしているのですが、
1回目、HomeからGalleryへ、GalleryからContentへと移動して戻るボタンを押すと正常に動作します。
2回目、Homeに戻った状態からもう一度Gallery => Contentへと移動し戻るボタンを押すと、
Galleryに戻るための関数は実行されるのですが、なぜがそのすぐ後にHomeに戻る関数も実行されHomeに戻ってしまいます。

###該当のソースコード

HTML

1/*HTMLの構造*/ 2<div id="home"> 3 4</div> 5 6<div id="gallery"> 7 <header><div id="back"></div></header> 8 <div id="content"> 9 </div> 10</div>

戻るボタンを押された時に実行される関数です。

javascript

1function headerBackButton() { 2 $("#back").click(function(){ 3 if(currentState == "indivisual"){ 4 backToGallery(); 5 console.log("backToGallery"); 6 return false; 7 }else if(currentState == "gallery"){ 8 backToHome(); 9 console.log("backToHome"); 10 return false; 11 } 12 }); 13}

###試したこと
何らかの理由で$("#back").click()が2回実行されてifの両方に該当してしまったのだと思い、setTimeoutでtrue,falseで少し待たせてからやってみても、なぜか同じタイミングif内とelse if内のコードが実行されていて意味がありませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
jQuery: jquery-3.1.0.js

なぜこうなるのかご存知の方おられましたらご教授ください。宜しくお願いします。

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

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

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

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

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

s8_chu

2017/02/12 19:37

currentState, backToHome関数について追記していただけませんか?
guest

回答1

0

ベストアンサー

#backがクリックされるとheaderBackButton()が呼ばれるのだとしたら、クリックするたびに$("#back").click()が実行される。つまり、クリックするたびにaddEventListenerを行っているわけで、イベントリスナーが増つづけます。結果、1回のクリックで$("#back").click()で登録した処理が実行される回数が増えていきます。
書くとしたら、$("#back").click()は無しにするべきだと思います。

js

1function headerBackButton() { 2 if(currentState == "indivisual"){ 3 backToGallery(); 4 console.log("backToGallery"); 5 return false; 6 }else if(currentState == "gallery"){ 7 backToHome(); 8 console.log("backToHome"); 9 return false; 10 } 11}

投稿2017/02/12 20:50

turbgraphics200

総合スコア4267

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

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

Tats.N

2017/02/13 07:38

感謝感激です。clickについての挙動の勉強になりました。本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問