※ ChatGPTを利用し、要約された質問です(原文:どのタグにあるonclickから取得されたか)
JavaScript関数で画像クリックされたか調べる方法は?
このQ&Aのポイント
HPのサイドバーに複数の画像リンクを表示しています。
画像には同じ名前の関数をonclick属性に指定しています。
クリックされた画像を判別するための方法を教えてください。
HPのサイドバーに画像リンクをいくつか並べて表示しています。
リンク方法はformで画像はinput type="image"です。
このとき、それぞれの画像input type="image"に対して同じ名前の関数xxxxxでクリック処理をonclick="xxxxx()"と書いています。
画像がクリックされるとformによるリンクとはまた別のリンクを使いたいのでこのような記述をしています。
このときクリックされたらjavascriptでの関数xxxxxが呼ばれると思いますが、どの画像がクリックされたか調べる方法はないものでしょうか?
そのどの画像がクリックされたか分かる情報を元にif文で処理を分けたいと考えています。
具体的に実現したいのが例えば、サイドバーに国一覧が並んでいるとして
日本
アメリカ
中国
のような。日本をクリックするとページのメイン部分には日本関連のものが表示されますが、そのクリックのタイミングでサイドバーでは
日本
-札幌
-仙台
-東京
-名古屋
-大阪
-広島
-福岡
アメリカ
中国
といったサブメニューを表示させたいんです。このサブメニュー自体はサイドバーをtableで分割しているのでそれぞれtr にidを使ってdocument.getElementById("id").style.displayで実現できています。
日本を押したときに日本のサイドバーだけを表示させて、アメリカを押したらアメリカのサイドバーだけを表示したいということです。onclick時の関数で処理しようと思ったので各項目に同じonclick="xxxxx"を書いて処理しようと思うのです。
これで実現したいことと困っている所が伝わるか怪しいところですがご理解頂けて解決方法が分かる方がいましたら回答宜しくお願いします。
お礼
先にサブメニューをareaで非表示にした後で表示したいものだけを表示するやり方だと表示されたときに上下に余計なスペースみたいなのが出てしまうので以前どおり先にすべて表示した状態で非表示化したいものだけを非表示にする方法にしました。 そして、onclickやonsumit等を使わずにformのactionでリンクされた後にonloadで関数を呼び出して行うとうまくいきました。 問題は「その判別できる値を利用して、onloadイベントで開いておく要素を選択すれば良いはずです。」。 phpなので <body onload="show(<?php print $xxxxx; ?>)"> と書いたのですがうまくいきません。 bodyなのでどのタイミングでPOSTすべきなのでしょうか?
補足
回答ありがとうございます。 おっしゃるとおり、どの国のバナーからクリックされても同じページにリンクされてバナーをクリックされたときにformのhiddenで飛んでくる情報をもとに処理を分けて書いています。 今回、location.hrefでせっかくアドレスバーに付加してリンクできたのに問題がおきているのはそのhiddenの情報が渡されていないため、その情報をもとに処理している部分でデータがないからエラーメッセージが出てしまいました。 >その判別できる値を利用して、onloadイベントで開いておく要素を選択すれば良いはずです。 onloadは(ネットで調べましたが)bodyタグに入れるんでしょうか?ページの読み込みか完了したときに動く関数を指定して。 >別に全ソースを開示する必要はありませんが、重要なformタグの構成や表示ページの仕様なんかがわかると回答し易いです。 項目名は適当ですが今の国バナーのformは以下のような感じにしています。すべて書いていないですけど。 <form name="formname" method="post" onsubmit="return false;"> <input type="image" src="japan.jpg" width="100px" height="30px" onclick="show('81');" /> <input type="hidden" name="catid" value = "1" > <input type="hidden" name="country" value = "81" > <input type="hidden" name="pancate" value = "時計" > <input type="hidden" name="panname" value = "日本の時計" > </form> 先ほどエラーメッセージが出たのはメインページではまず一番上にパンくずリストを表示させるために、hiddenにしてあるデータを使って書く予定がデータが渡されていないためにエラーとなりました。 表示ページの仕様しては上にヘッダ部、下にフッター部があり、今ですと左右にサイドバーがあります。右のサイドバーは今のところただのリンク集的な存在で、左サイドバーにその種類別や国別等のバナーを並べています。 中央のページでは上からパンくずリスト、種類名、表示合計件数、次ページへのリンク/並び替え、そして1ページ最大20件の商品名や商品画像、簡単な説明やカート等を縦に並べて表示させている状態です。