Javascript JS:将onclick函数添加到表单元格

Javascript JS:将onclick函数添加到表单元格,javascript,html-table,onclick,add,Javascript,Html Table,Onclick,Add,我创建了一个简单的示例: var myvalue=20//简化我如何计算myvalue var cell=document.getElementById(“mytd”); setAttribute('onclick','addToCell('+myvalue+');'); 函数addToCell(值){ var td_cell=document.getElementById(“mytd”); td_cell.value=td_cell.value+“”+value; } 测验 您只需要这样做

我创建了一个简单的示例:

var myvalue=20//简化我如何计算myvalue
var cell=document.getElementById(“mytd”);
setAttribute('onclick','addToCell('+myvalue+');');
函数addToCell(值){
var td_cell=document.getElementById(“mytd”);
td_cell.value=td_cell.value+“”+value;
}

测验

您只需要这样做。
没有
属性。使用
innerHTML

var myvalue=20;
var cell=document.getElementById(“mytd”);
setAttribute('onclick','addToCell('+myvalue+');');
函数addToCell(值){
var td_cell=document.getElementById(“mytd”);
td_cell.innerHTML=td_cell.innerHTML+“”+值;
}

测验

它不起作用的原因是JSFIDLE被设置为在加载时运行,因此代码实际上看起来像

window.addEventListener("load", function () {
  var myvalue = 20 // abbreviating how I calculate myvalue
  var cell = document.getElementById("mytd");
  cell.setAttribute('onclick', 'addToCell(' + myvalue + ');');

  function addToCell (value) {
    var td_cell = document.getElementById("mytd");
    td_cell.value = td_cell.value + ' ' + value;
  }
})
现在,由于您以错误的方式(使用属性)添加事件,函数将在全局范围内执行。因此,单击处理程序无法看到onload方法内部定义的函数

因此,您要么需要将JavaScript设置为在主体底部运行(JSFIDLE设置),要么需要将函数设置为全局函数,要么最好的解决方案是使用addEventListener以正确的方式绑定事件

输入没有值,它们有HTML和文本。所以它需要是innerHTML

  var myvalue = 20 // abbreviating how I calculate myvalue
  var cell = document.getElementById("mytd");
  cell.addEventListener('click', function () { addToCell(myvalue); });

  function addToCell(value){
    var td_cell = document.getElementById("mytd");
    td_cell.innerHTML = td_cell.innerHTML + ' ' + value;
  }
试试这个

var myvalue = 20 // abbreviating how I calculate myvalue
var cell = document.getElementById("mytd");
//cell.setAttribute('onclick', 'addToCell(' + myvalue + ');');
cell.addEventListener('click', function() {
    addToCell(myvalue);
    });
function addToCell(value){
var td_cell = document.getElementById("mytd");
td_cell.innerHTML = td_cell.innerHTML + ' ' + value;
}

Stackoverflow具有与JSFIDLE相同的功能,请在此处发布您的代码,这样我们就不必转到其他站点。创建/编辑问题时的snipplet按钮是您所需要的。为什么不使用您喜爱的搜索引擎来查找答案?TD上有value属性:look
。现在有了属性。最好说属性。@dfsq确定,将重写它。@dfsq抱歉,我不确定。问题中
值到底在哪里?@user3182532如果你读了我的答案,你就会知道为什么它在JSFIDLE上不起作用。@user3182532读了Epasarello的答案,它有正确的解释。奇怪的是,有人投了反对票,事实上,这是你问题的最佳和最完整的答案。解释一下,不要只说“试试这个”。我认为我没有背景来理解你的答案,我试过多次阅读。我不知道你所说的“设置为运行onload”是什么意思,你所说的“函数(哪一个?听起来像有一些“onload函数”?或者你是说addToCell?)在全局范围内执行”是什么意思?单击JSFIDLE上的齿轮。它有关于代码如何运行的模式。默认值是在window onload上运行的代码。由于添加了属性,onclick将在文档范围内激发代码。因此,它着眼于事件的全球范围。由于事件是在onload方法内部定义的,因此外部不可见。范围的基本概念。