JavaScript for CSS

※ 以下はIE4, Netscape 6レベルのブラウザが前提です。

CSSの属性値はJavaScriptを使って動的に変化させることが可能です。

<SCRIPT type="text/javascript">
<!--
function changeColorByClick(id){
  var obj=document.all && document.all(id)
   || document.getElementById && document.getElementById(id);

 if(obj) obj.style.color="red";
  // if(obj && obj.style) の方が安全かも
}
//-->
</SCRIPT>

強調部分は、変更したい属性と属性値を指定します。例えば、次のようにします。

color="red"; // colorをredに変更
fontFamily="serif"; // font-familyをserifに変更(ハイフンは削除して、次の文字を大文字にする)
cssFloat="right"; // floatはプログラミング言語によっては予約語なので例外。IEではstyleFloat。

ブラウザの振り分けは特定のオブジェクトやメソッドが定義されているかどうかで行っています。ブラウザのバージョンをチェックした方が確実かもしれません。

Xdocument.write(X)
document.documentElement
document.body
document.images
document.applets
document.links
document.forms
document.anchors
document.layers
document.all
document.implementation
document.getElementsByTagName
document.getElementById
document.getElementsByName
document.defaultView
document.styleSheets

ブラウザの対応は以下のようになっていますが、iCabは実装中のようです。


IE4Win
IE5
Win
IE6
Mac
IE5
NN4Netscape6iCab
Pre 2.51
document.documentElement×××
document.body×
document.images
document.applets
document.links
document.forms
document.anchors
document.layers××××××
document.all××
document.implementation×××
document.getElementsByTagName××
document.getElementById××
document.getElementsByName××
document.defaultView××××××
document.styleSheets××

それで、動的に変化させる「きっかけ」として、HTML 4.0では以下のような内在イベントが定義されています。

onload

ウインドウあるいは全てのフレームの読み込みが完了した時に発生する。BODYかFRAMESET要素に設定することが出来る。

<BODY onload="function()"> <!-- 読み込みが完了したら呼び出す -->

<BODY onload="setTimeout('function()',n)"> <!-- 読み込みが完了してからnミリ秒後に呼び出す -->

onunload

ウインドウあるいはフレーム内の文書を破棄する時に発生する。BODYかFRAMESET要素に設定することが出来る。

onclick

要素上でポインティングデバイスのボタンがクリックされた時に発生する。ほとんどの要素に設定することが出来る。

<SPAN id="c1">変化させたい要素</SPAN>
<SPAN onclick="changeColorByClick('c1')">イベントを受け取る要素</SPAN>

クリックしたら最初に定義した関数を呼び出すのですが、どの要素を変更するのか教えるためにIDを引数として渡します。一回のイベントで複数の関数を呼び出しても構いません。

<SPAN id="c2">変化させたい要素1</SPAN> | <SPAN id="c3">変化させたい要素2</SPAN>
<SPAN onclick="changeColorByClick('c2');changeColorByClick('c3')">イベントを受け取る要素</SPAN>

また、一つの要素に複数のイベントを設定することも出来ます。

<SPAN id="c4">変化させたい要素</SPAN>
<SPAN onclick="changeColorByClick('cD')" ondblclick="fDblclick('cD')">イベントを受け取る要素</SPAN>

イベントを受け取った要素自身を変更するなら、もっと簡単です。thisは関数を呼び出したオブジェクトを参照します。

<SCRIPT type="text/javascript">
<!--
function hideElement(){
 if(document.styleSheets) arguments[0].style.display="none";
}
//-->
</SCRIPT>

<SPAN onclick="hideElement(this)">変化させたい要素</SPAN>

ブラウザに設定されているデフォルトのアクションをキャンセルするには、return fakseとします。

<SCRIPT type="text/javascript">
<!--
function openWindow(){
 window.open("../index-j.htm");
}
//-->
</SCRIPT>

<A href="../index-j.htm" onclick="openWindow();return false">HOME</A>

<SCRIPT type="text/javascript">
<!--
function changeColor(id){
  var obj=document.all && document.all(id)
   || document.getElementById && document.getElementById(id);

 if(obj){
  obj.style[] = "";
  obj.style[] = "";
}
//-->
</SCRIPT>
<!--
以下、いくつかの要素に設定 onclick="changeColor(id)"
-->
INPUT

A イメージマップ1 HOME CSS JavaScript

ondblclick

要素上でポインティングデバイスのボタンがダブルクリックされた時に発生する。ほとんどの要素に設定することが出来る。この部分をダブルクリックすると、アンダーラインが引かれます。関数定義はソースを参考にして下さい。

INPUT

A イメージマップ2 HOME CSS JavaScript

onmousedown, onmouseup

それぞれ、要素上でポインティングデバイスのボタンが押された時、離された時に発生するに発生する。ほとんどの要素に設定することが出来る。

INPUT

A イメージマップ3 HOME CSS JavaScript

onmouseover, onmousemove, onmouseout

それぞれ、要素上にマウスポインタが乗った時、 要素上でマウスポインタが動いた時、マウスポインタが要素から離れた時に発生する。ほとんどの要素に設定することが出来る。

INPUT

A イメージマップ4 HOME CSS JavaScript

onfocus, onblur

それぞれ、要素がポインティングデバイスあるいはタブキーによってフォーカスを受け取った時、 失った時に発生する。 LABEL, INPUT, SELECT, TEXTAREA, BUTTON, A, AREA要素に設定できる。

INPUT

A イメージマップ5 HOME CSS JavaScript

onkeypress

要素上でキーボードのキーが押されて離された時に発生する。ほとんどの要素に設定することが出来る。

INPUT

A イメージマップ6 HOME CSS JavaScript

onkeydown, onkeyup

それぞれ、要素上でキーボードのキーが押された時、 離された時に発生する。ほとんどの要素に設定することが出来る。

INPUT

A イメージマップ7 HOME CSS JavaScript

onsubmit, onreset

それぞれ、フォームが送信される時、リセットされる時に発生する。FORM要素に設定できる。

onselect

テキスト入力枠のテキストが選択された時に発生する。INPUT, TEXTAREA要素に設定できる。

INPUT

onchange

コントロールの値が、フォーカスを失った時にフォーカスを受け取った時と異なると発生する。INPUT, SELECT, TEXTAREA要素に設定できる。

INPUT

FORM要素にonsubmitおよびonreset、各フォームコントロールにそれぞれonclick, ondblclick, onmousedown, onmouseup, onfocus, onblur, onkeypress, onkeydown, onkeyup, onchangeを設定すると、どんな順番でイベントが発生するか?



どんな順番か?