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

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

新規登録して質問してみよう
ただいま回答率
85.48%
イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

jQuery

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

Q&A

解決済

1回答

1783閲覧

jqueryで表示させたモーダルを、時間経過・時間経過する前でもクリックを条件に非表示にしたい

marutto

総合スコア32

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

jQuery

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

0グッド

0クリップ

投稿2019/10/14 10:09

編集2019/10/14 23:59

jqueryのイベント操作に関する質問です。

jqueryで表示させたモーダルを、「表示してから一定時間後」と「ブラウザ側でクリックした時」どちらかをイベントにして非表示にしたいのですが、方法が分からずに悩んでいます。

実装したい挙動としては

「自動で表示したモーダルを「表示から5秒後に自動で消える、5秒経つ前であってもブラウザ側でクリックしたら、モーダルを非表示にする」

というものです。

現時点のモーダルを表示させるコードは以下の通りです。

//フラグ時に自動でモーダル表示 var modalFlg = true; var eventModal = $('.js-modal-auto'); var modalCover = $('.js-modal-cover'); if(modalFlg){ eventModal.add(modalCover).show(); eventModal.add(modalCover).delay(5000).fadeOut(1000); };

クリック時にモーダルを非表示にするなら

eventModal.add(modalCover).on('click', function() { eventModal.add(modalCover).fadeOut(1000); });

イベントハンドラについてはspaceで区切ることで複数のイベントを仕込めるということはわかりました。
https://qiita.com/shizuma/items/d561f37f864c3ebb5096

しかし、「クリック」はイベントですが、時間経過についてはdelayやsetIntervalといったエフェクト系メソッドしかないように思います(私が不勉強なだけかもしれませんが)。

必須の機能ではないのですが、2つの条件を両立してモーダルの非表示させる方法をご存知であればご教示お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

setTimeoutを使って、時間が来たら.trigger( 'click' )で閉じてしまえばよいです。

【WindowOrWorkerGlobalScope.setTimeout() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/WindowTimers/setTimeout

【.trigger() | jQuery API Documentation】
https://api.jquery.com/trigger/

投稿2019/10/14 13:19

kei344

総合スコア69400

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

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

marutto

2019/10/15 00:04

ご回答ありがとうございます。 仰る通り、setIntervalで時間経過後にtrigger()を使えばクリックイベントを一定時間後に仕込めました! ただ、私の書き方が悪かったのか、望んでいた挙動と異なります。 「自動で表示したモーダルを「表示から5秒後に自動で消える、5秒経つ前であってもブラウザ側でクリックしたら、モーダルを非表示にする」 というイベント設定をする方法についてご存知でしたら、改めてアドバイスお願いします。 お手数をかけて申し訳ございません。
kei344

2019/10/15 00:09

setIntervalとsetTimeoutは違うので、まずそこは確認してください。 > 望んでいた挙動と異なります。 どう違うかを具体的にお願いします。
marutto

2019/10/16 07:43

適切なアドバイスいただいたにも関わらず誤読したためにお手数をおかけしました。申し訳ありません。 改めてコードを見直したお陰で、実装したいかった通りの機能を実装できました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問