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 下工作。我创建了一个小型演示小提琴。在所有情况下,在所有浏览器中,对象在加载前都显示为 null,除非脚本块位于您在正文中访问的元素之后。

请注意,尽管getElementsByTagName在不同浏览器中的反应方式有所不同,但它不同于getElementByIdfiddle

另一种选择是不等待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
于 2012-10-23T05:41:17.327 回答
0

我在这里使用的相同答案Javascript onclick 函数不起作用应该适用。

于 2012-10-23T05:36:51.603 回答