<SCRIPT> function s(n) { for (i = 1; i <= 5; i++) { if (n == i) { doc = "trir.gif" } else { doc = "triy.gif" } eval("document.tri" + i + ".src='" + doc + "'") } } </SCRIPT> <A HREF="viaduc.html" OnMouseOver="s(1)"><IMG SRC="triy.gif" NAME="tri1" BORDER="0">ヴィア・デュック地区</A><BR> <A HREF="elysee.html" OnMouseOver="s(2)"><IMG SRC="triy.gif" NAME="tri2" BORDER="0">エリゼ宮</A><BR> <A HREF="madeleine.html" OnMouseOver="s(3)"><IMG SRC="triy.gif" NAME="tri3" BORDER="0">マドレーヌ寺院</A><BR> <A HREF="Invalides.html" OnMouseOver="s(4)"><IMG SRC="triy.gif" NAME="tri4" BORDER="0">アンヴァリッド</A><BR> <A HREF="cite.html" OnMouseOver="s(5)"><IMG SRC="triy.gif" NAME="tri5" BORDER="0">シテ島</A><BR>
マウスカーソルが項目に乗ると関数s()が呼ばれます。それぞれ、自分に対応する番号を 引数として渡すように書いてあります。 たとえば、s(3)のときは
document.tri1.src='triy.gif' document.tri2.src='triy.gif' document.tri3.src='trir.gif' ←ここだけ違う document.tri4.src='triy.gif' document.tri5.src='triy.gif'というように画像を設定すればいいわけです。 forループを使って処理したいところですが、tri1, tri2, ...はオブジェクト名で すから変数のようにオブジェクト名を順番に変えていくことはできません。
こんなときに使うのがeval()関数です。eval()は引数で与えた文字列をJavaScript のスクリプトとして実行します。
eval("document.tri4.src='triy.gif'")のように実行したいスクリプトの文字列を作ってしまえばいいわけです。 書き換える部分を考慮して文字列を作ると
"document.tri" + i + ".src = '" + filename + "'"のようになります。