Javascript,从onClick()调用函数不起作用

时间:2018-03-24 19:05:49

标签: javascript

尝试通过单击单元格来调用函数。与alert(this.innertext)一起使用时,window.close()onClick可以独立工作。但是,当我插入自己的功能时,它不起作用。检查时控制台没有错误。

mywin.document.write("<td onClick='test2()'>" + this.tArray[i] + "</td>");
function test2() {
    alert("hi");
}

3 个答案:

答案 0 :(得分:0)

如果mywin是一个窗口,那么您需要将test2放入该窗口的全局范围内,以便元素可以看到它。添加:

myWin.test2 = () => alert('hi');

但是使用适当的DOM方法插入元素并在Javascript本身而不是HTML中附加侦听器会更加优雅和易于管理。

答案 1 :(得分:0)

假设mywin是窗口对象(这是不必要的)。

您需要添加整个表格结构。

&#13;
&#13;
var mywin = window;
mywin.document.write("<table><tbody><tr><td onClick='test2()'>Hello!</td></tr></tbody></table>");

function test2(){ alert("hi");}
&#13;
&#13;
&#13;

<强>建议:

使用函数addEventListener

此方法使用函数querySelectorAll来循环并绑定事件click

&#13;
&#13;
document.write("<table><tbody><tr><td class='clickable'>Ele</td></tr><tr><td class='clickable'>From SO</td></tr></tbody></table>");

Array.prototype.forEach.call(document.querySelectorAll('.clickable'), function(td) {
  td.addEventListener('click', test2);
});

function test2(){ alert("hi");}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以通过创建元素并使用匿名函数创建onclick来实现此目的:

(将yourTableRow替换为引用表中行的对象)

var cell = document.createElement("td");
cell.onclick = function (item) {
    return function () {
        test2(item);
    }
}(this.tArray[i]);

yourTableRow.appendChild(cell);

function test2(value) {
    console.log(value);
}