0
var myButton = document.getElementsByTagName("input");

myButton[0].onclick = function() {
  if(ansArray[0] == 'a')
    myButton[0].style.backgroundColor = "green";
  else
    myButton[0].style.backgroundColor = "red";
}

myButton[1].onclick = function() {
  if(ansArray[0] == 'b')
    myButton[1].style.backgroundColor = "green";
  else
    myButton[1].style.backgroundColor = "red";
}

onclick関数は上記の例 (IE9) では機能しませんが、Chrome と Firefox では正常に機能します。

4

2 に答える 2

1

問題は、ボタンにアクセスしようとしているときに DOM がまだロードされていないことです。onclick ハンドラーを window.load でラップすると、すべて正常に動作するはずです。

window.onload = function () {
    var myButton = document.getElementsByTagName("input");

    myButton[0].onclick = function() {
        if(ansArray[0] == 'a') {
            myButton[0].style.backgroundColor = "green";
        } else {
            myButton[0].style.backgroundColor = "red";
        }
    }

    myButton[1].onclick = function() {
        if(ansArray[0] == 'b') {
            myButton[1].style.backgroundColor = "green";
        } else {
            myButton[1].style.backgroundColor = "red";
        }
    }
}

これが Webkit と Mozilla で動作することに、私は実際に驚いています。小さなデモfiddleを作成しました。いずれの場合も、スクリプト ブロックが本体内でアクセスしている要素の後にない限り、すべてのブラウザーでオブジェクトはロード前に null として出力されます。

getElementsByTagNameただし、異なるブラウザー内での反応には違いがあることに注意してください。それはgetElementById: fiddleとは異なります。

別の代替手段は、画像を含むすべてのコンテンツがロードされた後に発生するためwindow.onload、待機しないことです。document.bodywindow.onload

function Start() {
    if (document.body) {
        var myButton = document.getElementsByTagName("input");

        myButton[0].onclick = function() {
            if(ansArray[0] == 'a') {
                myButton[0].style.backgroundColor = "green";
            } else {
                myButton[0].style.backgroundColor = "red";
            }
        }

        myButton[1].onclick = function() {
            if(ansArray[0] == 'b') {
                myButton[1].style.backgroundColor = "green";
            } else {
                myButton[1].style.backgroundColor = "red";
            }
        }
    }
}

setInterval(Start, 50); // 50 ms is a small enough interval to retry
于 2012-10-23T05:41:17.327 に答える
0

ここで使用したのと同じ答えJavascript onclick functions do not workを適用する必要があります。

于 2012-10-23T05:36:51.603 に答える