JavaScript初心者です。
下記では、div内でphoto1.jpgを表示していますが、ここが別のコードで他の画像に書き換えられるため、下のjsで、画像がクリックされた際にsrcの中身を確認し、それに応じてアンカータグのhrefを書き換えようとしています。
ですが、参照の仕方が悪いのか、switch文が思惑通りに動いてくれません。
どなたか詳しい方、ご教授ください。よろしくお願いいたします。
$("#main a").click(function(){
var mimage = document.getElementById("main-img");
switch(mimage.src){
case "images/photo1.jpg":
$("#main a").attr("href","sub1.html");
break;
case "images/photo2.jpg":
$("#main a").attr("href","sub2.html");
break;
case "images/photo3.jpg":
$("#main a").attr("href","sub3.html");
break;
}
});
<div id="main">
<a href="sub1.html"><img src="images/photo1.jpg" alt="" width="700" height="515" id="main-img" /></a>
</div>
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
var mimage = document.getElementById("main-img");
var array = mimage.src.split("/");
switch(array[array.length-1]){
case "photo1.jpg":
$("#main a").attr("href","sub1.html");
break;
以下略
}
でいいと思う。
何度か動作確認をした結果、下記のことがわかりました。
main-imgをクリックしてリンク先を表示した後でブラウザの戻るボタンで戻り、main-img(その時点でphoto1に戻っている)を再度クリックすると、alertが表示されました。
その内容は下記の通りです。
file:///xxx/xxx/xxx/xxx/images/photo1.jpg
これをcaseの条件にすると、その後の処理が動きます。
ただし、photo1以外がmain-imgに表示されている状態では何度クリックしてもalertは出ません。つまり、クリック時のfunction自体が動いていないようです。(いつも動いていると勘違いしていました。)
つまり、main-imgをクリックした際、クリック時のfunctionが動く前にもともとリンクしていたsub1.htmlへ飛んでしまっているような感じです。
このような場合、どうすれば回避できるでしょうか。
何度もすみませんが、ご教示願えれば幸いです。
No.5
- 回答日時:
> alert(mimage.src);を入れて、クリックしてみたのですが、変化なしでした。
それは、switch文以前にその定義したfunctionが実行されていないんじゃないの?
記述されたHTMLとJavaScriptだけじゃなく、<html>~</html>まで記述していただけるかしら。
この回答への補足
いえ、switch文の前に$("#main a").attr("href","sub3.html");を入れてみるとちゃんと変更されるので、それはないと思います。
でも原因は不明…なので、下記に一式貼付けてみます。よろしくお願いいたします。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>トップのイメージ</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3. …
<style type="text/css">
* {
margin:0;
padding:0;
border:0;
}
#container {
width:820px;
margin:20px;
}
#navi {
width:106px;
float:right;
}
#navi li {
list-style-type:none;
width:106px;/*float:left; */
}
#navi li img {
border:3px solid #ddd;
}
#main {
width:700px;
float:left;
}
#main a img {
position:absolute;
}
</style>
<script type="text/javascript">
$(function(){
$("#navi a").mouseover(function(){
$("#main img").before("<img src='"+$(this).attr("href")+"' alt=''>");
$("#main img:last").fadeOut("fast",function(){
$(this).remove();
});
});
$("#navi a").click(function(){
$("a#vol1").attr("href","sub1.html");
$("a#vol2").attr("href","sub2.html");
$("a#vol3").attr("href","sub3.html");
$("a#vol4").attr("href","sub4.html");
$("a#vol5").attr("href","sub5.html");
$("a#vol6").attr("href","sub6.html");
});
$("#main a").click(function(){
var mimage = document.getElementById("main-img");
switch(true){
case /images\/photo1\.jpg/.test(mimage.src):
$("#main a").attr("href","sub1.html");
break;
case /images\/photo2\.jpg/.test(mimage.src):
$("#main a").attr("href","sub2.html");
break;
case /images\/photo3\.jpg/.test(mimage.src):
$("#main a").attr("href","sub3.html");
break;
}
/*switch(mimage.src){
case "images/photo1.jpg":
$("#main a").attr("href","sub1.html");
break;
case "images/photo2.jpg":
$("#main a").attr("href","sub2.html");
break;
case "images/photo3.jpg":
$("#main a").attr("href","sub3.html");
break;
} */
});
});
</script>
</head>
<body>
<div id="container">
<div id="navi">
<ul>
<li><a href="images/photo1.jpg" id="vol1"><img src="images/photo1_thum.jpg" alt="シャンデリア" width="100" height="75" /></a></li>
<li><a href="images/photo2.jpg" id="vol2"><img src="images/photo2_thum.jpg" alt="バラ" width="100" /></a></li>
<li><a href="images/photo3.jpg" id="vol3"><img src="images/photo3_thum.jpg" alt="海" width="100" /></a></li>
<li><a href="images/photo4.jpg" id="vol4"><img src="images/photo4_thum.jpg" alt="門" width="100" /></a></li>
<li><a href="images/photo5.jpg" id="vol5"><img src="images/photo5_thum.jpg" alt="海" width="100" /></a></li>
<li><a href="images/photo6.jpg" id="vol6"><img src="images/photo6_thum.jpg" alt="あじさい" width="100" /></a></li>
</ul>
</div>
<div id="main"> <a href="sub1.html"><img src="images/photo1.jpg" alt="" width="700" height="515" id="main-img" /></a> </div>
</div>
<br style="clear:both" />
</body>
</html>
No.4
- 回答日時:
>このコードでimagesを追加するときは
正規表現内では、/を\でエスケープしてください。
switch(true){
case /images\/photo1\.jpg/.test(mimage.src):
$("#main a").attr("href","sub1.html");
break;
case /images\/photo2\.jpg/.test(mimage.src):
$("#main a").attr("href","sub2.html");
break;
case /images\/photo3\.jpg/.test(mimage.src):
$("#main a").attr("href","sub3.html");
break;
}
No.3
- 回答日時:
回答1にもありますが、絶対パスになるからでしょう。
正規表現にしておけば絶対でも相対でも動くと思います。
switch(true){
case /photo1\.jpg/.test(mimage.src):
$("#main a").attr("href","sub1.html");
break;
case /photo2\.jpg/.test(mimage.src):
$("#main a").attr("href","sub2.html");
break;
case /photo3\.jpg/.test(mimage.src):
$("#main a").attr("href","sub3.html");
break;
}
この回答への補足
詳しくありがとうございます。
画像はすべてimagesというフォルダに入っているのですが、このコードでimagesを追加するときは、下記のようになるでしょうか? 正規表現もよく分からなくて申し訳ないです。
case /images/photo1\.jpg/.test(mimage.src):
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のバナーをリロードする度...
-
window.openで値の渡し方を教え...
-
一定時間ごとにgif画像の切...
-
jQueryでサーバー上のファイル...
-
画像をクリックすると別ウイン...
-
outlook2010の不具合で困ってい...
-
タイマーをデジタル時計風にす...
-
MAX関数を使ってからLEFT JOIN...
-
MFCで画像を表示させているので...
-
JavaScriptで変更した属性の元...
-
Gifアニメ、最後のコマに行った...
-
クリックで色変更後に既に変更...
-
createElementが一瞬で消えてし...
-
デフォルト非表示にしたい。【t...
-
javascriptテキストBOX色を元に...
-
iframe内のリンクが飛ばないの...
-
Slick.jsのオプションrtlについて
-
onmouseoverの表示切り替えが上...
-
html スクロール要素を下から表...
-
javascriptで教えてください。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.openで値の渡し方を教え...
-
JavaScriptで画面サイズによっ...
-
jQueryでサーバー上のファイル...
-
画像と文字を同時に切り替えたい
-
インラインフレームでのクッキ...
-
setAttributeによる画像の差し替え
-
【jQuery】複数の画像の読み込...
-
JAVAで画像をボタンで切り替え...
-
画像の座標位置取得
-
連番画像「次へ」「前へ」で、...
-
imgのsrcに値を設定するには
-
画像をクリックすると別ウイン...
-
複数のボールの落下、バウンド...
-
連続したURLへのwindow.openの...
-
JavaScriptで画像置換えてクリ...
-
<img src"○.jpg">の○をランダム...
-
スライドショーにフェード効果...
-
jQueryで画像を重ねる
-
クリッカブルマップでリモート...
-
複数のバナーをリロードする度...
おすすめ情報