アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascriptの勉強をしています。


htmlのテーブルタグで、ブロックが3つあるとします。
■■■
それぞれのブロックを<div id="00"><div id="01"><div id="02">
として定義しています。

onclick="document.getElementById('00').style.backgroundColor='#ff0000'
でクリックしたブロックの色を変更しています。



質問したい内容は、「1箇所をクリックした時に、他の2箇所の色を戻す」方法です。
以下はサンプルです。
--------------------------------------
<TABLE BORDER="2" bordercolor="#000000">
<TR>
<TD bgcolor="#008000">
<div id="00">
<IMG onclick="document.getElementById('00').style.backgroundColor='#ff0000';document.getElementById('01').style.backgroundColor='#008000';document.getElementById('02').style.backgroundColor='#008000';" border="0" src="item/img/00.png" width="36" height="36">
</div>
</TD>
<TD bgcolor="#008000">
<div id="01">
<IMG onclick="document.getElementById('01').style.backgroundColor='#ff0000';" border="0" src="item/img/01.png" width="36" height="36">
</div>
</TD>
<TD bgcolor="#008000">
<div id="02">
<IMG onclick="document.getElementById('02').style.backgroundColor='#ff0000';" border="0" src="item/img/02.png" width="36" height="36">
</div>
</TD>
</TABLE>---------------------------------------------





1箇所をクリックした時に、他の2箇所の色を戻すには
「00をクリックした時に、01の色を戻す02の色を戻す」のように、
3箇所全てに記述しなければならないのでしょうか?

テーブルのブロックが少なければ、これでもいいのですが、
たとえば100個とか1000個になった時にはとても大変な作業になってしまいます。

他になにか効率のいい記述の仕方はありますでしょうか?
ご存知の方いらっしゃいましたら、ご教授よろしくお願いいたします。

A 回答 (2件)

最後にクリックした要素のidをグローバル変数に保存するようにするのはどうでしょう?


グローバル変数を使うのは安直ではありますが、複雑なことをしないのであれば以下のような単純な方法が簡便で良いのではないでしょうか。

<head>
<title>test</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
border: 1px solid #000;
}
</style>
<script type="text/javascript">
var lastid = "";
function fn(e) {
if (lastid.length) {
document.getElementById(lastid).style.backgroundColor = "#fff";
}
e.style.backgroundColor = "#f00";
lastid = e.id;
}
</script>
</head>

<body>
<div id="00" onclick="fn(this)">00</div>
<div id="01" onclick="fn(this)">01</div>
<div id="02" onclick="fn(this)">02</div>
</body>

</html>
    • good
    • 0
この回答へのお礼

レス頂き感謝します。

ご教授してくださった方法で、手を加えましたところ
私が希望する通りの動作をしてくれました!

当方まだ勉強したてなもので、
分かりやすく記述例を作って頂いたことで、とても理解が早まりました。

大変嬉しいです。ありがとうございました<(__)>

お礼日時:2011/05/27 20:39

1000個あるうちの200番目をクリックされたとき


1000個の色を元の色に変えて200番目を改めて色を変える
とやると処理はともかく実装は楽ね。

処理を軽くするには
現在色が変わっている場所
というのを覚えておいて
クリックしたらその場所を戻す
クリックした場所を変える
という風にするんだわ。
    • good
    • 0
この回答へのお礼

レス頂き感謝します。

>処理はともかく
そうなんですよね。記述なら大量の単純作業ですが、
実行したときにやたら重い命令になってしまいます。
タグとしても整理できない汚れた感じがしますし・・

「色の変わっている場所」のidを変数として格納して
格納された場所を直すという方法ですね。

アドバイス頂き、ありがとうございました<(__)>

お礼日時:2011/05/27 20:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!