###前提・実現したいこと
htmlとjavascriptで等確率ランダム条件分岐で画像を表示させるシステムを作っています。
条件分岐の機能を実装しても一番最初の画像しか表示されないなくて困っています。
使用用途はブログに広告を貼りたいと考えています。広告会社から発行してもらうURLが「提供されているコード」です。
とても初歩的な質問ですがご教授よろしくお願いしますm(_ _)m
参考にしたページです。
http://www.shurey.com/js/samples/2_msg4.html
###提供されているコード
<script type="text/javascript" src="A"></script>
###該当のソースコード
<script type="text/javascript" rand = Math.floor(Math.random()*4); if (rand == 0) src="A"; if (rand == 1) src="B"; if (rand == 2) src="C"; if (rand == 3) src="D";> </script>
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/02/25 10:57
2017/02/25 11:04
退会済みユーザー
2017/02/25 11:09 編集
2017/02/25 11:12
退会済みユーザー
2017/02/25 11:24
回答3件
0
HTML
1<script type="text/javascript" 2rand = Math.floor(Math.random()*4); 3 4if (rand == 0) src="https://j.zucks.net.zimg.jp/j?f=188499"; 5if (rand == 1) src="https://j.zucks.net.zimg.jp/j?f=189461"; 6if (rand == 2) src="https://j.zucks.net.zimg.jp/j?f=189462"; 7if (rand == 3) src="https://j.zucks.net.zimg.jp/j?f=189463";> 8</script>
これは、たぶん、こんな感じで属性として解釈されています。
HTML
1<script type="text/javascript" 2rand="Math.floor(Math.random()*4);" 3if="" 4(rand="=" 50)="" 6src="https://j.zucks.net.zimg.jp/j?f=188499" 7;="" 8if="" 9(rand="=" 101)="" 11src="https://j.zucks.net.zimg.jp/j?f=189461" 12 13... 14 15> 16</script>
後からかぶった属性は無視されますから、結局こうなります。
HTML
1<script type="text/javascript" 2rand="Math.floor(Math.random()*4);" 3if="" 4(rand="=" 50)="" 6src="https://j.zucks.net.zimg.jp/j?f=188499" 7;="" 81)="" 92)="" 103)="" 11> 12</script>
ここで有効な属性はtype``src
のみですから結局はこれと同じです。
HTML
1<script type="text/javascript" src="https://j.zucks.net.zimg.jp/j?f=188499"> 2</script>
なので、最初のソースのスクリプトだけ実行され、決まった広告が出力されることになります。
つまり、ひとことで言うと「タグの内部にコードを書いちゃダメ」ということです。
追記
javascript
1<script type="text/javascript"> 2var rand = Math.floor(Math.random()*4); 3var src; 4if (rand == 0) src="https://j.zucks.net.zimg.jp/j?f=188499"; 5if (rand == 1) src="https://j.zucks.net.zimg.jp/j?f=189461"; 6if (rand == 2) src="https://j.zucks.net.zimg.jp/j?f=189462"; 7if (rand == 3) src="https://j.zucks.net.zimg.jp/j?f=189463"; 8document.write('<script src="'+src+'"><\/script>'); 9</script>
動作未確認。動いたとしてもお行儀の悪いコードです。
投稿2017/02/25 12:15
編集2017/02/25 12:43総合スコア36078
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/25 12:17
退会済みユーザー
2017/02/25 12:22
退会済みユーザー
2017/02/25 12:22
退会済みユーザー
2017/02/25 12:25
2017/02/25 12:28
退会済みユーザー
2017/02/25 12:31
退会済みユーザー
2017/02/25 12:35
2017/02/25 12:45
退会済みユーザー
2017/02/25 12:50
2017/02/25 13:06
退会済みユーザー
2017/02/25 18:45
2017/02/25 22:08
2017/02/25 23:35
退会済みユーザー
2017/02/26 06:56
0
ベストアンサー
こんな感じから始めてみてはどうでしょうか。
<boby>と</body>の中に入れてください。
<img src="" id="img1" /> <script type="text/javascript"> let src; rand = Math.floor(Math.random()*4); if (rand == 0) { src="画像のパス1"; } else if(rand == 1) { src="画像のパス2"; } else if(rand == 2) { src="画像のパス3"; } else if(rand == 3) { src="画像のパス4"; } document.getElementById('img1').setAttribute("src",src); </script>
「追加」
5秒間隔で切り替え、今回は10回で終わらせています。
ランダムで同じ値が出た場合は考慮していません。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <title></title> <style media="screen"> .cm_group { display: block; } </style> </head> <body> <div class="cm"> <div id="cm1" class="cm_group"> <script src="https://j.zucks.net.zimg.jp/j?f=188499"></script> </div> <div id="cm2" class="cm_group"> <script src="https://j.zucks.net.zimg.jp/j?f=189462"></script> </div> <div id="cm3" class="cm_group"> <script src="https://j.zucks.net.zimg.jp/j?f=189461"></script> </div> <div id="cm4" class="cm_group"> <script src="https://j.zucks.net.zimg.jp/j?f=189463"></script> </div> </div> <script type="text/javascript"> var showCnt = 0; function changeCM(){ var cmCurrent = Math.floor(Math.random() * 4); var lengthGroup = lengthGroup = $('.cm_group').length; var i; for(i=0; i<lengthGroup; ++i){ var objEq = $('.cm_group').eq(i); if(i == cmCurrent){ objEq.css('display','block'); }else{ objEq.css('display','none'); } } } function showCM(){ changeCM(); showCnt++; console.log(showCnt); var tid = setTimeout(function(){ showCM(); },5000); if(showCnt > 9){ clearTimeout(tid); console.log("end!"); } } showCM(); </script> </body> </html>
一から説明はできないので分からない所は別に質問を立てられれば、色々なやり方を提示して頂けるかもしれません。
投稿2017/02/25 11:11
編集2017/02/25 23:50総合スコア350
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/02/25 11:23
2017/02/25 11:36
退会済みユーザー
2017/02/25 11:40
2017/02/25 11:43
退会済みユーザー
2017/02/25 11:47
2017/02/25 11:54
退会済みユーザー
2017/02/25 11:56
0
まさかとは思いますがコードを<script>の開始タグ内に書いてません?
投稿2017/02/25 10:14
総合スコア4267
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/02/25 10:17
2017/02/25 10:21
退会済みユーザー
2017/02/25 10:51 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。