• ブログTOP
  • AI・ディープラーニング
  • AR
  • VR
  • WEBサイト
  • WEBマーケティング
  • SEO
  • SNS
  • その他
  • お問い合わせ

ALAKI株式会社

COZIKEEいつまでも使えるTech情報発信ブログ

リクルートサイトはこちら >

jQuery.modal.jsでクリックイベントが動かない方、いませんか?

2016年11月11日

  • このエントリーをはてなブックマークに追加

こんばんは、Webプログラマの篠田です。

自転車で通勤をしているのですが、コート無しで疾走していると朝晩の寒さで辛い思いをしています。
今日からはコートを装備してやってきたので、もう寒さに挫けそうになることもなさそうです。

さて、本日はJavaScript(JS)特にjQueryプラグインの「jQuery modal」についてお話したいと思います。
WebプログラマといってもPHPだけを触っているわけではありませんよ(笑)

この記事の目次

  • 1 jQuery.modal.jsでハマる
  • 2 問題の記述方法を見る
  • 3 Ajaxでの原因
  • 4 Ajaxでの解決方法
  • 5 まとめ

jQuery.modal.jsでハマる

「jQuery.modal.js」というのはモーダルウィンドウを簡単に作ることができるjQueryプラグインの1つです。

【公式サイト】
http://jquerymodal.com/

その「jQuery.modal.js」を使う際に、ある特定の条件がそろうと、ハマるというお話です。

問題が起きる条件

(1)モーダルウィンドウ内のコンテンツをAjaxを使って出力する
(2)モーダルウィンドウで表示されたコンテンツ内に、クリックイベントがある
(3)クリックイベントで開閉式コンテンツのようなことをする

発生する問題

すべての条件がそろった状態で、下記の手順で操作をすると問題が発生します。

(1)初回、モーダルウィンドウ表示時には、クリックイベントが正常に動作する
(2)モーダルウィンドウをキャンセルまたは、画面遷移が発生しない処理でモーダルウィンドウを閉じる
(3)もう一度、モーダルウィンドウを開いてクリックイベントを実行すると動かない

【ポイント】
この上記の問題は、Chromeのデベロッパーツールでのデバックではエラーが一切表示されませんでした。
※エラーが出ないエラーほど厄介なことはありません。

問題の記述方法を見る

まずは、公式で紹介されているAjaxを使ってのモーダルウィンドウの表示の仕方を見てみます。

HTML部分
1
<a href=“Ajaxで呼び出したいURL" id="manual-ajax">second example</a>

JavaScript部分
JavaScript
1
2
3
4
5
6
7
8
<script>
$('#manual-ajax').click(function(event) {
     event.preventDefault();
     $.get(this.href,function(html) {
          $(html).appendTo('body').modal();
     });
});
</script>

これを実行することで、「外部ファイルを読み込みモーダルウィンドウで表示できる」と公式では説明しています。
というか、これしか書かれていません。

このプログラムにはある前提があります。
それが、「モーダルウィンドウ内では、動的処理を行わない」というものです。
つまり、「表示して終わり」というものであればこれで問題ありません。

ですが、「動的処理を含むモーダルウィンドウ」では正常に動作しないのです。

Ajaxでの原因

実は、「jQuery.modal.js」のAjax処理の特徴なのですが、この方法で実行すると呼び出し先のHTMLの内容を、呼び出し元のHTML内にDOMによって書き込みます。

そして、「キャンセル」などでモーダルウィンドウを閉じると、モーダルウィンドウ自体は消えるのですが、実は「display:none」で見えなくしているだけということが分かりました。

つまり、1回目は正常に動くが2回目以降で不具合が発生するのは、消えたと思っていたコンテンツが実は見ないようになっているだけで、実際にはHTML内に書かれていたということです。

例えば、クリックイベント等で下記のようなセレクタの操作を想定します。

1
$(‘セレクタ名’).addClass('open’);

本来であれば、対象のセレクタに「open」というクラスを追加するとなるのですが、同じ名前のセレクタが複数あった場合、正常に動かない可能性があります。

Ajaxでの解決方法

原因が、「一度開いたことのあるモーダルウィンドウ」だとわかれば、先に開いていたモーダルウィンドウを削除してから、新しいモーダルウィンドウを呼び出してあげれば解決します。

具体的なコードは下記のようになります。

1
2
3
4
5
6
7
8
9
10
<script>
$('#manual-ajax').click(function(event) {
     $(‘.modal’).remove(); //追加コード
 
     event.preventDefault();
     $.get(this.href,function(html) {
          $(html).appendTo('body').modal();
     });
});
</script>

クラス「modal」は、「jQuery.modal.js」の指定で記述義務があるので書かれているはずですので、「modal」を持つボックスをすべて削除するために「remove()」メソッドを実行します。

その次に新しいモーダルウィンドウを呼び出してあげれば、モーダルウィンドウ内での処理が正常に動作するようになります。

まとめ

便利なモジュールやライブラリを使う際に、デモで紹介されていないような使い方をするときにハマるということはよくあります。

特に不具合が出ているにも関わらず、エラーとして検出できない場合は、DOMの更新結果を見ながら原因を1つ1つ地味に探していくしかありません。

これで少しでも同じような事案で悩んでいる方の作業コストが下がればとおもいます。

ではまたー。

  • ツイート
  • このエントリーをはてなブックマークに追加

You may also like...

  • 13993703_xxl

    PHPで配列をテキストに結合する方法

    13 1月, 2017

  • a80f1d6c6827958816c7034215236676_m

    Webサイトを常時SSL化する4つのポイント

    24 10月, 2017

  • 14800708_xl

    Webサイトに突然[email protected]と出て困っている方はいらっしゃいませんか?

    21 10月, 2016

プログラマー募集
  • Next story Google Analyticsのショートカット機能を使って、分析・レポート作成の時間を短縮しよう!
  • Previous story Twitter検索の効率が劇的にアップ!超絶便利なTwittet検索オプション10選

弊社サービス

MONJI+ MUGHEN ALAKI クラウド型受発注システム さよなら過去のAR。WebARがイベント集客に革命を起こします。

運営会社

ALAKI株式会社 ALAKI株式会社採用サイト

人気の記事

  • alaki1462_A_businessman_who_works_logically_1da80a2e-c297-4911-bdd6-feba0ebf1357

    仕事術

    【書籍要約】数学的な仕事術大全

    4 11月, 2024

  • fv-main-img-min

    空間コンピューティング

    世界初!「空間コンピューティング」を専用端末不要、スマホのWebブラウザのみで実現する『Web XR Site』を公開しました

    22 6月, 2023

  • Virtual reality players isometric vector illustration. VR UI and navigation. Futuristic digital technology. Virtual screen. Mixed reality 3d concept. Person in VR headset. Web banner idea

    AR

    Appleから新世代MRグラス「Vision Pro」の登場 – デジタルと現実世界が融合する新時代へ

    6 6月, 2023

  • AWE

    未分類

    ARアプリ『MUGHEN』が世界最大のAR/VRアワード「AWE」のファイナリストに選出されました!

    26 5月, 2023

  • python-logo-master-v3-TM

    pyhotn / 業務効率化

    「SwinIR」で高画質化した画像を pythonを使用して一括で元のサイズに戻す方法

    2 2月, 2023

カテゴリー

  • AI・ディープラーニング
  • AR
  • BtoB
  • CMS
  • Git
  • Google AdWords
  • gulp
  • Javascript
  • Laravel
  • Photoshop
  • Pug
  • pyhotn
  • Sass
  • SEO
  • SNS
  • Twitter広告
  • VR
  • Web3.0
  • WEBサイト
  • WEBマーケティング
  • YouTube
  • コーディング
  • システム開発
  • スマートフォンサイト
  • セキュリティ
  • セミナー
  • その他
  • ツール
  • デザイン
  • ベトナムレポート
  • 仕事術
  • 未分類
  • 業務効率化
  • 空間コンピューティング
  • 色

アーカイブ

  • 2024年11月
  • 2023年6月
  • 2023年5月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年2月
  • 2021年12月
  • 2021年9月
  • 2021年7月
  • 2021年6月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年6月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年12月
  • 2017年11月
  • 2017年10月
  • 2017年9月
  • 2017年8月
  • 2017年7月
  • 2017年6月
  • 2017年4月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年7月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2013年10月
  • 2013年9月

Facebook

お問い合わせ

お問い合わせ

人気の記事

  • 【書籍要約】数学的な仕事術大全
  • 世界初!「空間コンピューティング」を専用端末不要、スマホのWebブラウザのみで実現する『Web XR Site』を公開しました
  • Appleから新世代MRグラス「Vision Pro」の登場 – デジタルと現実世界が融合する新時代へ
  • ARアプリ『MUGHEN』が世界最大のAR/VRアワード「AWE」のファイナリストに選出されました!
  • 「SwinIR」で高画質化した画像を pythonを使用して一括で元のサイズに戻す方法

カテゴリー

  • AI・ディープラーニング
  • AR
  • BtoB
  • CMS
  • Git
  • Google AdWords
  • gulp
  • Javascript
  • Laravel
  • Photoshop
  • Pug
  • pyhotn
  • Sass
  • SEO
  • SNS
  • Twitter広告
  • VR
  • Web3.0
  • WEBサイト
  • WEBマーケティング
  • YouTube
  • コーディング
  • システム開発
  • スマートフォンサイト
  • セキュリティ
  • セミナー
  • その他
  • ツール
  • デザイン
  • ベトナムレポート
  • 仕事術
  • 未分類
  • 業務効率化
  • 空間コンピューティング
  • 色

検索

ALAKI株式会社 © 2025. All Rights Reserved.