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

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

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

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

jQuery

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

Q&A

解決済

2回答

2340閲覧

【jQuery】.htmlで追加した要素に、そのまま.attrするには?

nnahito

総合スコア2004

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2016/06/23 10:08

質問概要

jQueryの.html()で追加した要素の中のあるidに、attr()で属性を付けたい。

質問詳細

一つの関数の中に、2回ajax処理が書かれており、
1回目のajax処理でカレンダーを作成します。

2回目のajax処理で、カレンダーのある日付にattrで属性を付けたいのですが、
.onのイベントは発生せず、何を指定したら良いのか困っています…

onイベントをclickなどなしで、どのように発火させれば良いのでしょうか。
ご存じの方がいらっしゃいましたら、ご教授いただけると幸いです。

javascript

1// カレンダーのデータ取得 2 function getCalendar(year, month){ 3 var dt = new Date(); 4 5 // 引数が与えられなかった場合 6 if ( year === undefined ) dt.getFullYear(); 7 if ( month === undefined ) dt.getMonth() + 1; 8 9 var map = {"year": year, "month": month }; 10 11 // カレンダーを取得 12 $.ajax({ 13 type: "POST", 14 url: "./operation/get_calendar.php", 15 data: map, 16 }).done(function(data){ 17 sp = data.split("\t"); 18 19 var cnt = 0; 20 var result = '<table id="calendar">'; 21 result += '<tr><td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr>'; 22 23 for ( var i=0; i<sp.length; i++ ){ 24 if ( cnt == 0 ) result += '<tr>'; 25 26 if ( isNaN(sp[i]) == false ){ 27 result += '<td id="d'+ sp[i] +'">' + sp[i] + '</td>'; 28 }else{ 29 result += '<td id="blank">' + sp[i] + '</td>'; 30 } 31 32 cnt += 1; 33 34 if ( cnt >= 7 ){ 35 cnt = 0; 36 result += '</tr>'; 37 } 38 39 } 40 41 result += '</table>'; 42 $("div#calendar").html(result); 43 44 45 // 追加情報取得 46 $.ajax({ 47 type: "POST", 48 url: "./operation/get_gameplans_from_date.php", 49 data: map, 50 }).done(function(data){ 51 line = data.split("\n"); 52 53 for ( var i=0; i<line.length; i++ ){ 54 if ( line[i] == "" ) continue; 55 56 sp = line[i].split("\t"); 57 58 console.log(line[i]); 59 $("table#calendar").on("load", function(){ 60 $("#d"+sp[3]).attr("background-color", "red"); //こいつを追加したい 61 }); 62 63 } 64 65 }); 66 67 68 }); 69 70 }

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

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

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

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

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

guest

回答2

0

ベストアンサー

単に

JavaScript

1 $("#d"+sp[3]).css("background-color", "red");

でいいんじゃないですか?
もうhtmlとして存在していて、何かを待つ必要はないですよね?

投稿2016/06/23 11:34

編集2016/06/23 12:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nnahito

2016/06/23 11:42

ご回答有り難うございます。 最初にそれを行ったのですが、どうも発火しなくて… それで探してきたのが.onなのです……
退会済みユーザー

退会済みユーザー

2016/06/23 12:09 編集

発火とか不要です。 見直したら、 attr となってますね。 これを cssにすれば 動くんじゃないでしょうか。 attr なら bgcolor ですか。
nnahito

2016/06/23 12:26

ご回答有り難うございます。 bgcolorに直したところ、期待通りの動作になりました! ありがとうございました
guest

0

on loadを期待するのであれば、htmlで追加する前に、一度jQueryオブジェクトに変えてonを登録したあとappend等で入れるとうまく発火すると思います。

Javascript

1var temp = $(result); 2temp.on("load", function(e){ 3 4}); 5$("div#calendar").append(temp);

投稿2016/06/23 11:31

masaya_ohashi

総合スコア9206

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

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

nnahito

2016/06/23 11:40

ご回答有り難うございます。 理解が悪くて申し訳ないのですが、以下のように修正しましたが発火していないようです… ※修正部のみ抜粋 var temp = $(result); // ゲーム情報取得 $.ajax({ type: "POST", url: "./operation/get_gameplans_from_date.php", data: map, }).done(function(data){ line = data.split("\n"); for ( var i=0; i<line.length; i++ ){ if ( line[i] == "" ) continue; sp = line[i].split("\t"); console.log(line[i]); temp.on("load", function(e){ $("#d"+sp[3]).attr("background-color", "red"); }); } }); $("div#calendar").html(temp); alert(temp); これはどういうことを表しているのでしょうか? 全てのデータを、変数resultに格納後、 var temp = $(result) を行い、 temp.on("load", function(e){ $("#d"+sp[3]).attr("background-color", "red"); }); のようにすれば良いのでしょうか?
masaya_ohashi

2016/06/23 15:01

https://jsfiddle.net/ppzy8cu1/2/ 検証してみましたが、大変申し訳無いことに私の提示した方法では「tableのloadは検知できない」ということがわかりました。私の記憶ではimgはloadイベントが取れたのでtableもいけるやろと思っていましたが、そう甘くないようです。 var temp = $(result)は、resultのHTMLタグをパースして内部のDOMにアクセスできるようになるので、追加前にイベントを登録できるようになります。上記動作テストはimgのonloadはキャッチできていますが、tableタグのloadはキャッチ出来ていません。 とりあえずあなたがやりたいことはnoricyan2さんが叶えてくれたようなので、私の知識はおまけ程度に持って帰って下さい。
nnahito

2016/06/24 06:46

ご返信有り難うございます。 いえいえ!対応していただきありがとうございます。 まだまだ素人エンジニア見習い…くらいなので、追加知識など大変ありがたいです! これからもどうぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問