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

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

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

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

Q&A

解決済

3回答

1346閲覧

バナーを数秒毎に自動で切り替えたい。

hoho

総合スコア5

JavaScript

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

0グッド

0クリップ

投稿2020/03/27 00:30

編集2020/03/27 01:38

前提・実現したいこと

バナーを数秒毎に自動で切り替えたい。

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

今埋まっているバナーはシステムで出しており、html側を変更することができない状況です。
飛び先を含め自動で切り替えたいのですが、エラーが解消できずに困っている状況です。

システムの中身についてはくわしく分かりません。
機能的には、バナーの管理画面で画像やURLやIDなどの情報を登録して承認されると、指定した期間の間Web上にバナーが表示されるといったものです。
通常であれば2枚それぞれ登録したらよいのですが、同じ会社からの広告を同時に2箇所の場所をとって掲載ができない状況であり、場所的には1箇所の掲載のまま自動で2枚切り替えならOKということで現在試しているところです。

該当のソースコード

html

1<li class="item"> 2<a href="飛び先1" target="_blank" id="ad_A" tabindex="0"> 3<img src="画像1" alt="広告1"> 4</a> 5</li>

イメージとしては、広告1と広告2を数秒毎にぱっぱと切り替えられるようにしたいです。

javascript

1var img = [ 2'<a href="飛び先1" target="_blank" id="ad_A" tabindex="0"><img src="画像1" alt="広告1"></a>', 3 4'<a href="飛び先2" target="_blank" id="ad_B" tabindex="0"><img src="画像2" alt="広告2"></a>' 5]; 6 7var count = -1; //*2 8imgTimer(); 9 10function imgTimer() { 11 //画像番号 12 count++; //*3 13 //画像の枚数確認 14 if (count == img.length) count = 0; //*4 15 //画像出力 16 document.getElementById("ad_A").parent().innerHTML = img[count]; 17 //次のタイマー呼びだし 18 setTimeout("imgTimer()",1000); //*6 19} 20

うまくいかない点

画像出力のところが、うまくいっていないです。
画像だけでなくhtml自体を変えたく試しましたが、動きません。

<li class="item">のところは、上下にも同クラスのバナーたちがおり、しかもアクセス毎に他バナーとランダムで順番が入れ替わる仕様になっているため、順番を指定することはできません。

参考ページ:http://www.shurey.com/js/samples/3_img8.html

エラー情報

エディタ上では

16行目(document~)→’document’ is not defined 18行目(setTimeout~)→’setTimeout’ is not defined

と出ており、

DeveloperTool上だと、

Uncaught TypeError: document.getElementById(...).parent is not a function at imgTimer (test.js:16) at test.js:8

と出ています。

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

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

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

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

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

yambejp

2020/03/27 00:37

HTMLが変えられないなら、jsもcssも反映できないのでは?
m.ts10806

2020/03/27 00:51

出ているエラーをご提示ください
hoho

2020/03/27 01:00 編集

>yambejpさん コメントありがとうございます。 jsやCSSはすでに入っているものを修正してアップできるので反映は可能です。 >m.ts10806さん コメントありがとうございます。 エディタ上では 16行目(document~)→’document’ is not defined 18行目(setTimeout~)→’setTimeout’ is not defined と出ており、 DeveloperTool上だと、 Uncaught TypeError: document.getElementById(...).parent is not a function at imgTimer (test.js:16) at test.js:8 と出ています。
m.ts10806

2020/03/27 01:11

質問本文に追記願います
hoho

2020/03/27 01:16

>m.ts10806さん 不慣れですみません、ご指摘ありがとうございます。 本文に追記しました。
oikashinoa

2020/03/27 01:30

> 今埋まっているバナーはシステムで出しており、 公表出来るのであれは、どんなシステムを使っているかを本文に書くとより良い回答がつくかも。
hoho

2020/03/27 01:42

>oikashinoaさん アドバイスありがとうございます。 システムの中身については詳しくわからないのですが書けるところまで追記しました。
guest

回答3

0

スマホからなので簡単に。
あと、乗り入れているシステムで許されるのかは確認して下さい。
質問内容と筋が変わるので話半分で。

広告表示と切り替えは、カルーセル(swiper.jsなど)に任せるのは有りかも。

ただし、以下の要件を考えるとグレーなので管理者に確認したほうが良いです。

通常であれば2枚それぞれ登録したらよいのですが、同じ会社からの広告を同時に2箇所の場所をとって掲載ができない状況であり、場所的には1箇所の掲載のまま自動で2枚切り替えならOKということで現在試しているところです。

投稿2020/03/27 10:04

oikashinoa

総合スコア2826

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

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

0

Elementオブジェクトにはparentというメソッドはないと思います。

Element - Web API | MDN

おそらく、NodeオブジェクトのparentElementプロパティとjQueryのparent()メソッドとを、混同されたのでは。
Node.parentElement - Web API | MDN
.parent() | jQuery API Documentation


また、document.getElementById("ad_A")という部分がありますが、2つ目のバナーはidが異なるので、上手く動かないのではないでしょうか?

投稿2020/03/27 03:47

Lhankor_Mhy

総合スコア36981

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

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

hoho

2020/03/27 05:23

>Lhankor_Mhyさん おっしゃる通り、いろいろと混同しておりました… idの件、ヒントになりました。ありがとうございます。
guest

0

自己解決

最初の相談で上げた記述とはだいぶ離れるのですが、実現したい動きにはなりましたので掲載します。

javascript

1$(window).load(function() { 2 setInterval(function () { 3 4 if (document.getElementById('ad_A')) { 5 $('#ad_A').parent().html('<a href="飛び先2" target="_blank" id="ad_B" tabindex="0"><img src="画像2" alt="広告2">'); 6 } else { 7 $('#ad_B').parent().html('<a href="飛び先1" target="_blank" id="ad_A" tabindex="0"><img src="画像1" alt="広告1">'); 8 } 9 10 }, 2000); 11});

投稿2020/03/27 05:28

hoho

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問