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

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

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

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

jQuery

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

Q&A

解決済

2回答

593閲覧

クリックで背景適用がされない

erp

総合スコア46

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2021/09/13 15:46

編集2021/09/13 23:22

前提・実現したいこと

クリックで背景に適用させたく、まとめて指定できないか試したのですが上手くいきませんでした。

発生している問題・エラーメッセージ

とくにコンソールはエラーがありませんでした。

該当のソースコード

js

1var elm = $('.wl').find('.lazyloaded'); 2 $(elm).each(function () { 3 var src = $(this).attr('src'); 4 $(this).on('click', function () { 5 document.body.style.backgroundImage='url("'+src+'")'; 6 document.body.style.backgroundSize='400px 400px'; 7 document.body.style.color='var(--text)'; 8 let target=document.querySelectorAll('.short-title'); 9 for(let i in target){ 10 if(target.hasOwnProperty(i)){target[i].style.borderBottom='1px solid var(--text)';} 11 }; 12 }); 13 });

HTML

1<div class="hoge"> 2 <img class="lazyloaded" src="xxx.png"> 3 <img class="lazyloaded" src="xxx.png"> 4</div> 5<div class="wl"> 6 <div> 7 <div> 8 <img class="lazyloaded" src="xxx.png"> 9 <img class="lazyloaded" src="xxx.png"> 10 </div> 11 </div> 12</div>

CSS

1:root { 2 --text: #000 3}

試したこと

クリックイベントが発火しないことについて調べてみたのですが、動的に追加した要素についてばかりで求めている情報は得られませんでした。

補足情報(FW/ツールのバージョンなど)

Firefox 最新版、Safari 604.1

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

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

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

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

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

m.ts10806

2021/09/13 21:50

直に.lazyloadedにクリックイベント当てるのではだめですか?かなり回りくどいことやってるような気がしますが・・
m.ts10806

2021/09/13 21:51

あと一行にしてると見づらいように思います。 document.body.style.backgroundImage='url("'+src+'")'; document.body.style.backgroundSize='400px 400px'; document.body.style.color='var(--text)'; let target=document.querySelectorAll('.short-title'); for(let i in target){if(target.hasOwnProperty(i)){target[i].style.borderBottom='1px solid var(--text)';}}; ↑改行、インデント適切につけてください。
erp

2021/09/13 23:01

同ページにクリックイベントを起こしたくない lazyloaded もあるため、このようにしています。 インデントしました。
m.ts10806

2021/09/13 23:12

$('.wl .lazyloaded') 直下前提なら $('.wl > .lazyloaded') とか試してみてください。 each不要です。
erp

2021/09/13 23:22

間に div がいくつか入るので、そのように修正しました。
m.ts10806

2021/09/13 23:33

前者で取れます
m.ts10806

2021/09/13 23:36

それに、jQueryであればeachしなくてもfindに続けてclickいけるはずで $('.wl').find('.lazyloaded').on( styleつける際もdocmentから辿るよりセレクタ.css()のほうが適切です
guest

回答2

0

自己解決

JS

1$(function(){ 2 $('.wl img').on('click',function(){ 3 $('body').css('background-image','url('+$(this).attr('data-src')+')'); 4 $('body').css('background-size', $(this).attr('data-size')); 5 }); 6 $('.wl img:not(.white)').on('click',function(){ 7 $('body').css("color", "var(--text)"); 8 $('.short-title').css("border-bottom", "1px solid var(--text)"); 9 }); 10 $('.wl img.white').on('click',function(){ 11 $('body').css("color", "#FFF"); 12 $('.short-title').css("border-bottom", "1px solid #FFF"); 13 }); 14});

これで出来ました。 lazyload で読み込んだ画像なので、 data-src を取得することで解決しました。

投稿2021/09/14 05:26

erp

総合スコア46

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

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

0

javascript

1$(function(){ 2 $('.wl .lazyloaded').on('click',function(){ 3 $('body').css('background-Image','url('+$(this).attr('src')+')'); 4 }); 5});

投稿2021/09/14 00:59

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問