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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Parse.com

Parse は BaaS ( Backend as a Service)モバイルアプリ開発のサーバサイド部分を肩代わりしてくれるサービスです

Q&A

解決済

1回答

2815閲覧

Parse.com でのログイン/ログアウト時のjQueryの動き

m055001

総合スコア72

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Parse.com

Parse は BaaS ( Backend as a Service)モバイルアプリ開発のサーバサイド部分を肩代わりしてくれるサービスです

0グッド

0クリップ

投稿2015/02/25 07:27

編集2015/02/25 09:35

現在、Parse.com のホスティングを利用して、ユーザーアカウントでの
ログイン/ログアウトができるページを作成しております。
以下が現時点でのページとコードです。

ページ:http://stocker.parseapp.com/
コード:http://codepen.io/c2104/pen/yyjZaP

問題は、ログインおよびログアウト直後、
一部のjsファイルでの動きができなくなってしまいます。


ページの動きとしては、カーソルを右上の『サインアップ』まで持って行くと、
jQuery(header.js)にてopacityとcursorを変更、クリックするごとにToggleが発生し、
フォームが見え隠れします。

中央のフォームにてログインができます。
ユーザー名:user
パスワード:user

ログインをすると画面がかわり、先ほどの『サインアップ』の部分が、
『ログアウト』へ切り替わります。


ここからが本題なのですが、本来『ログアウト』部分には、
header.jsのhoverで、
opacityとcursor変更を定義しているのですが、動きません。
が、F5などで更新をすると、動くようになります。
しかし、クリックをするとログアウトされるので、
stock.jsは動いているものと思われます。

これはログアウト後も同じで、ログアウト後の『サインアップ』部分で、
header.jsのhoverが効いていません。
が、F5などで更新をすると、動くようになります。


これの理由がわからず、行き詰っています。
Parse.comやJS、jQueryは最近始めたところで、
内包されているstock.jsやunderscore.jsは、
ほぼ用意されていたテンプレートのままです。

不足している情報などあれば、仰っていただければ追記いたします。
ご教授賜われれば幸いです。
宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードを拝見しましたが、import.jsを見ますと、stock.jsが実行されてからheader.jsが実行されているようです。
つまり、<script type="text/template" id="login-template"><script type="text/template" id="manage-todos-template"> のテンプレートがレンダリングされてから header.js が実行されています。
ところが、ログアウト動作をした時には <script type="text/template" id="manage-todos-template"> のレンダリングが実行されるのは header.js の実行後になりますから、$('.logout').hover() が実行される際にはまだ $('.logout') が存在しないということになります。

ということですので、こういう場合には jQueryの古いバージョンで言う「ライブイベント」 $(document).on('mouseenter', '.logout' ... のような記述をするのが一般的なのですが、どうやら mouseenterイベントはバブリングしないためこの方法も使えません。
しかし、コードを見る限りではCSSの操作しかしていないので、当該部分のjsを削除し、以下のようにCSSで書いてしまえば問題は解決するのではないかと思いますがいかがでしょうか?

lang

1/********** ログアウト **********/ 2.logout { 3 display: block; 4 background-color: #777; 5 padding: 0 20px; 6 font-size: 13px; 7 font-weight: bold; 8 line-height: 65px; 9 letter-spacing: 1px; 10 opacity: 0.6; 11 cursor: auto; 12} 13.logout:hover { 14 opacity: 1; 15 cursor: pointer; 16}

なお、$('.logout').click()に関しても動作していないと思いますので、そちらは.on()メソッドを使って書いてみてください。

投稿2015/02/26 02:42

編集2015/02/26 02:43
Lhankor_Mhy

総合スコア36089

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

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

m055001

2015/02/26 08:01

Lhankor_Mhy 様 ご回答ありがとうございました! CSSでのhover、確かにそうですね(汗 jQueryを触り始めてから、「なんとかjQueryを使って!」という気持ちばかりあって、 すっかり抜け落ちてしまっておりました。 お陰で、hoverに関しては、ログインボタン/ログアウトボタン共に解決いたしました。 また、併せてご回答いただいておりました、.click()を.on()メソッドへ書き換えました。 が、ログインボタンに関しては動作させられたのですが、ログアウトがうまく動作 させることができませんでした。 というのも、ログインボタンについては、  $(document).on('click','.signup-menu',function() {   $('ul.child','#signup li').slideToggle(500);  }); で、親要素をdocumentにしているのでOKなのですが、 ログアウトについては、  $(document).on('click','.logout',function(){   if (!confirm('ログアウトします。\nよろしいですか?')) {    return false;   }  }); とすると、if文より先に #login-template が読まれてしまうため、 ログアウト後の画面が表示された後に、confirm が表示される状態です。 しかし、親要素に .logout の親である .header-right を指定しても、 .logout 同様、.header-right は header.js が読まれる時点では存在しないため、効きません。 何か解決法はございますでしょうか? 調べる中で一つ、力技ですが、表示が切り替わるごとに document.location.reload(true); でページごと読み込み直すことで、 jsファイルを再度頭から読み込むようにすれば、対応は可能でした。 しかし、もっとスマートなやり方があれば、という気持ちがあります。
Lhankor_Mhy

2015/02/26 09:11

 あ、なるほど、それはたしかに動きませんね。  stock.js に直接書くべきだと思うのですが、強引にやるなら、Parse.jsよりもイベントバブリングが早い要素でイベントを拾って、event.stopPropergation() でバブリングを止めたのちに、自分自身を殺してからクリックイベントをトリガーすれば動くような気がします。  が、stock.js を見ると el: ".content" とあり、このライブラリをよく知らないのですが、おそらくこの要素からイベントをデリゲートするでしょうから、どうにも上手くいかなさそうな気がします。    やはり stock.js に直接書くべきなのでは。
m055001

2015/03/03 02:33

ご回答をいただいたにもかかわらず、返答が遅くなり、申し訳ございません。 色々な案、本当にありがとうございました! stock.jsに直接書く方法で進めていきたいと思います。 また機会がございましたら、ぜひよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問