問題は、ボタンにアクセスしようとしているときに 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.body
window.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