label タグの LABEL:hover が IE では動作しない

label タグって form の利便性を上げるナイスなタグがあって、

LABEL:hover {
    color:          red;
}

とかって CSS を書くと、マウスオーバーすると赤くハイライトして激しく便利なんだけど、悲しいことにこれは IE では機能しません。なのでこんな JavaScript を書いて、onLoad で hilight_labels(); したりすると IE でもマウスオーバーでテキストが赤くなります。

function hilight_labels() {
    var labels = document.getElementsByTagName('label');
    for ( var i = 0; i < labels.length; i++ ) {
        var label = labels[i];

        if ( label.attachEvent ) { // only IE
            label.attachEvent('onmouseover', label_over);
            label.attachEvent('onmouseout',  label_out);
        }
    }
}

function label_over(e) {
    var target = e.srcElement;
    target.style.color = "#ff0000";
}

function label_out(e) {
    var target = e.srcElement;
    target.style.color = "";
}

上のコードは IE でしか動作しないので( 厳密には知らないけど firefox だと label.attachEvent が失敗する ) firefox だと何も起こらない。なので CSSJavaScript 両方使っておけば IE でも firefox でも同じような挙動になる。

他にも IE は暗黙的な label タグを許容しなかったりするので for="id" が必要(input タグにも id が必要)だったりとか、面倒臭い。

http://www.kanzaki.com/docs/html/htminfo33.html
もっとすばらしいドキュメントがここにあります。