JavaScript onclick并非总是以编程方式工作

JavaScript onclick并非总是以编程方式工作,javascript,javascript-events,Javascript,Javascript Events,我正在尝试设置onclick事件处理程序。 出于某种原因,这是可行的: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript"> function init() { var td = document.getElementById("td"); var table = documen

我正在尝试设置onclick事件处理程序。 出于某种原因,这是可行的:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript">
        function init() {
            var td = document.getElementById("td");
            var table = document.createElement("table");
            var row = table.insertRow(0);
            var cell = row.insertCell(0);
            cell.innerHTML = "test";
            cell.onclick = function () { alert(); };
            td.appendChild(table);
        }
    </script>
</head>
<body id="td" onload="init()">
</body>
</html>

函数init(){
var td=document.getElementById(“td”);
var table=document.createElement(“表”);
var行=table.insertRow(0);
变量单元格=行插入单元格(0);
cell.innerHTML=“测试”;
cell.onclick=函数(){alert();};
td.儿童(表);
}
当把它放在js文件之外时,它不起作用:

function buildChessBoard() {
    var currentColor = white;
    //var table = "<table>";
    var table = document.createElement("table");          
    for (var i = 0; i < chessBoardsize / 8; i++) {
        //table += "<tr>";
        var row = table.insertRow(i);
        for (var j = 0; j < 8; j++) {
            //table += "<td class=" + currentColor + "Cell" + " id=" + (i * 8 + j) + " onclick=setCell(this)></td>";
            var cell = row.insertCell(j);
            cell.innerHTML = "test";
            cell.onclick = function () { alert(); };
            if (j != 7) {
                if (currentColor == white)
                    currentColor = gray;
                else
                    currentColor = white;
            }
        }
        //table += "</tr>";
    }
    //table += "</table>";
    //chessBoardDiv.innerHTML = table;
    chessBoardDiv.appendChild(table);
}
函数构建棋盘(){
var currentColor=白色;
//var表=”;
var table=document.createElement(“表”);
对于(变量i=0;i

知道为什么吗?

js在dom准备就绪之前加载,将其移动到底部,同时添加两个。。在body onload event中,它对我有效:(假设声明了所有变量)。在使用前是否定义了
白色
棋盘大小
灰色
?此外,FF将抛出一个关于空
警报()
的错误。到底什么不起作用?正如我们在上面看到的小提琴,一切都很好,点击单元格警报。。。