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

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

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

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

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

5375閲覧

jquery.balloon.jsを動的に作成した要素に対して割り当てる方法

tarotarosu

総合スコア114

HTML5

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

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/08/31 08:43

編集2016/08/31 10:01

###前提・実現したいこと
jquery.balloon.jsを使って吹き出しを表示させようとしています。
前もって用意したHTMLの要素に対しては問題なく吹き出しが表示されるのですが、「動的にimgを挿入」のソースコードのように動的に後から追加した要素に対しては、吹き出しが表示されませんでした。

###動的にimgを挿入

javascript

1$.ajax({ 2 url: "xml/image.xml", 3 type: "GET", 4 dataType: "xml", 5 timeout: 1000, 6 error: function(){ 7 alert("ロード失敗"); 8 }, 9 success: function(xml){ 10 $(xml).find("image").each(function(){ 11 var img_url = $(this).attr("url"); 12 $(".left ul").append('<li><img src="' + img_url + '" class="img-list" title="ここが消えてしまいます"></li>'); 13 }); 14 } 15}); 16

そこで対策として、「方法1」のソースコードのように記述したところ、うまく吹き出しが表示されるようになりました。

###方法1

javascript

1$(document).on({ 2 'mouseenter' : function(){ 3 $(".img-list").balloon(); 4 } 5});

しかし、吹き出しのスタイルを変更したいと思い、「方法2」のソースコードのように変更を加え、吹き出しを表示させようとしました。
すると、はじめはうまく吹き出しが表示されていたのですが、何回かマウスオーバーを繰り返していると、吹き出しが表示されなくなってしまいました。
そこで原因を調べるためにChromeの開発者モードで調べたところ、<img>のtitle属性が消えてしまっていました。
方法1と方法2でこのような違いが表れた原因は何なのでしょうか?
また、解決策も教えていただけると助かります_(..)

###方法2

javascript

1$(document).on({ 2 'mouseenter' : function(){ 3 $('.img-list').balloon({ 4 tipSize: 24, 5 css: { 6 border: 'solid 4px #5baec0', 7 padding: '10px', 8 backgroundColor: '#666', 9 color: '#fff' 10 } 11 }); 12 } 13});

###追記
動的に生成したものではない要素に対して同じコードで実験したところ、同じような結果になりました。
そこで、動的に生成した要素ではないため、「$(document).on({ ~」の部分を消して実験してみたところ、問題なく動きました。
「$(document).on({ ~」の部分に問題があるのでしょうか?
何か根本的な部分が間違っている気がしますが…

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

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

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

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

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

guest

回答2

0

HTML

1<img alt="test1" id="img1"> 2<div id="hoge"></div> 3

上記HTMLに対して、もしこんなふうにしてimg2へのclickが反映されないのでしたら

javascript

1<script> 2$(function(){ 3 $('img').click(function(){ 4 console.log($(this)[0].id); 5 }); 6 $('#hoge').append('<img alt="test2" id="img2">'); 7}); 8</script>

このように変更してください

HTML

1$(function(){ 2 $(document).on('click','img',function(){ 3 console.log($(this)[0].id); 4 }); 5 $('#hoge').append('<img alt="test2" id="img2">'); 6}); 7

投稿2016/09/01 02:45

yambejp

総合スコア114829

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

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

0

ベストアンサー

$( document ).on( { 'mouseenter' : function() { } } ); で設定されていますが、これは document にマウスエンターが起こるたびに関数を実行するので、同じ要素に対して何度も .balloon(); することになります。

JavaScript

1// $( document ).on ではなく $(document).ready( function() {} ); で。(ここではその短縮形を使っています) 2$( function() { 3 $( '.img-list' ).addClass( 'has_balloon' ).balloon( /* 省略 */ ); 4} );

JavaScript

1// successに入れてる関数部分 2var $ul = $( '.left ul' ); 3$( xml ).find( 'image' ).each( function() { 4 var img_url = $( this ).attr( 'url' ); 5 $ul.append( '<li><img src="' + img_url + '" class="img-list" title="ここが消えてしまいます"></li>' ); 6} ); 7$( '.img-list:not(.has_balloon)' ).addClass( 'has_balloon' ).balloon( /* 省略 */ );

<img>のtitle属性が消えてしまっていました。

そもそもそういう仕様です。(公式ページも同じ状況です)憶測ですが、title属性の付いた要素にマウスオ-バーすると、ブラウザの標準機能(title属性に設定した文字が表示される機能)で表示されるため、消しているのではないかと思います。

投稿2016/08/31 16:04

kei344

総合スコア69407

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

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

tarotarosu

2016/09/02 00:53

ご回答のコードを参考に修正したところ意図した動きをしてくれました。 なんとなくでやっちゃダメですね… 根本的なところから勉強しなおしたいと思います。 ご回答あありがとうございました_(._.)_
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問