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

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

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

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

HTML5

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

jQuery

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

Q&A

解決済

1回答

581閲覧

キャプション表示するとa要素が効かなくなる

Dragon131

総合スコア14

CSS3

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

HTML5

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

jQuery

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

0グッド

0クリップ

投稿2020/01/17 00:08

画像にホバーするとキャプション表示が出てくるようにjqueryで実装したのですがこれをすると画像をクリックするとサイトに飛ぶというa要素が効かなくなります。どうすればよいでしょうか。

HTML

1<section id="works"> 2 <h2 class="effect-fade"><img src="images/works.png"></h2> 3 <ul class="flexcontainer"> 4 <li class="flexitem effect-fade"> 5      <a href="http://サイトアドレス" target="_blank" ><img     src="images/thum1.png" width="" height="" "></a></li> 6 <li class="flexitem effect-fade"><a href="http://サイトアドレス" target="_blank" ><img src="images/thum2.png" width="" height="" alt=""></a></li> 7 </ul>

css

1#works ul li { 2 position: relative; 3 list-style: none; 4} 5 6 7.flexcontainer div { 8 position: absolute; 9 display: none; 10 width: 100%; 11 height: 100%; 12 padding: 20px; 13 background: rgba(17, 179, 179, .7); 14 top:0; 15 left:0; 16 box-sizing: border-box; 17} 18 19.flexcontainer p { 20 position: relative; 21 top: 10px; 22} 23

jquery

1$(".flexcontainer li").hover( 2 function () { 3 $(this).append("<div><p>" + $(this).children("a").children("img").attr("alt") + "</p></div>"); 4 $(this).children("div").stop().fadeIn(300); 5 6 //キャプションのテキスト位置:10pxから0pxへ移動 7 $(this).children("div").children("p").stop(). 8 animate({ "top": 0 }, 300); 9 }, 10 function () { 11 $(this).children("div").stop().fadeOut(300); 12 13 $(this).children("div").children("p").stop(). 14 animate({ "top": "10px" }, 300, function () { 15 $(this).parent("div").remove(); 16 }); //アニメーション事後処理 17 } //マウスアウト時の処理 18 );

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

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

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

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

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

m.ts10806

2020/01/17 00:12

aのクリックイベントは拾えますか?
Dragon131

2020/01/17 00:51

イベントは拾えています。
m.ts10806

2020/01/17 00:54

aのクリックイベントですよね 提示されてないコードの中で試されたということですよね、 クリック拾えるならそこからhrefの値とって別ウィンドウ開くのでとりあえず対応はダメですか?
shinoharat

2020/01/17 01:55

直接関係ないかもしれませんが、thum1.png の img タグのダブルクォーテーションが一つ多いみたいです。 誤: <img src="images/thum1.png" width="" height="" "> 正: <img src="images/thum1.png" width="" height="">
guest

回答1

0

ベストアンサー

キャプション用の div が a 要素を隠すような形で手前に配置されるので、その後ろにクリックイベントが飛んでない状態ですかね。

キャプションの css に pointer-events: none を追加すれば、キャプションに対するクリックが無効になる(=その裏にある a をクリックできるようになる)はずです。

css

1.flexcontainer div { 2 3 ...中略... 4 5 pointer-events: none; 6}

--

以下 pointer-events - css | MDN より引用

値を none に設定すると、要素がポインターイベントのターゲットではないことを示すのに加え、ポインターイベントが要素を「通過」して、代わりに要素の「下」をターゲットにすることを指示します。

投稿2020/01/17 02:32

shinoharat

総合スコア1676

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

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

Dragon131

2020/01/17 09:18

なるほど!ありがとうございました。冒頭の$(".flexcontainer li")を$(".flexcontainer a")に変えてもうまくいきましたがまずいでしょうか。
shinoharat

2020/01/18 10:09

その方法でも、確かにうまくいきますね。 細かい挙動の違いにこだわらないなら、それでもいいんじゃないかなと思います。 以下、li + pointer-events と a で何が違うのかまとめましたので、参考にどうぞ。 -- 【解説: なぜ a に変えてもうまくいくのか?】 $(".flexcontainer a") に変えるとキャプションの挿入先が a の内側に変わります。 ``` イメージ: <a ...> <img ... /> <div>キャプション</div> </a> ``` そのため、「キャプションもリンクの一部」と認識され、キャプションをクリックした場合もリンク先に飛べるようになります。 【li と a でどんな違いがあるのか?】 hover のトリガーが li から a に変わったことで、javascript が反応する範囲が少し変わる可能性があります。 hover の対象が li の場合は、画像に直接ポインタを重ねなくても、画像と同じ横軸にマウスポインタ持っていくだけでキャプションが表示されていたはずです。 一方、a に変えた後は、画像に直接マウスポインタを重ねた場合だけ、キャプションが表示されるようになります。 (css の状態にもよるため、必ず質問者さんの手元で同じ現象が起きるとは限りませんが) 「その程度の違いならどうでもいい」とか「むしろ画像に直接マウスポインタを重ねた場合だけキャプションが表示の方がいい」とかなら、a に変えちゃっていいと思います。
Dragon131

2020/01/31 19:13

微妙な違いがあるのですね。勉強になります。今回はpointer-events: none;を使いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問