JS:将 onclick 函数添加到 table 单元格
JS: add onclick function to table cell
我创建了一个最小示例:https://jsfiddle.net/n2r5t91v/
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;
}
<table>
<tr>
<td id="mytd">
test
</td>
</tr>
</table>
我希望 <td>
单元格的值在单击时从 "test" 变为 "test 20"。为什么它不是这样工作的?
你只需要这样做。 <td>
没有 value
属性。使用 innerHTML
:
var myvalue = 20;
var cell = document.getElementById("mytd");
cell.setAttribute('onclick', 'addToCell(' + myvalue + ');');
function addToCell(value) {
var td_cell = document.getElementById("mytd");
td_cell.innerHTML = td_cell.innerHTML + ' ' + value;
}
<table>
<tr>
<td id="mytd">
test
</td>
</tr>
</table>
这部分你也可以换个方式做:
td_cell.innerHTML += ' ' + value;
它不起作用的原因是 jsfiddle 设置为 运行 onload 所以代码实际上看起来像
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设置为运行(jsFiddle设置),你需要将函数设为全局,或者最好的解决方案,绑定事件使用 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;
}
我创建了一个最小示例:https://jsfiddle.net/n2r5t91v/
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;
}
<table>
<tr>
<td id="mytd">
test
</td>
</tr>
</table>
我希望 <td>
单元格的值在单击时从 "test" 变为 "test 20"。为什么它不是这样工作的?
你只需要这样做。 <td>
没有 value
属性。使用 innerHTML
:
var myvalue = 20;
var cell = document.getElementById("mytd");
cell.setAttribute('onclick', 'addToCell(' + myvalue + ');');
function addToCell(value) {
var td_cell = document.getElementById("mytd");
td_cell.innerHTML = td_cell.innerHTML + ' ' + value;
}
<table>
<tr>
<td id="mytd">
test
</td>
</tr>
</table>
这部分你也可以换个方式做:
td_cell.innerHTML += ' ' + value;
它不起作用的原因是 jsfiddle 设置为 运行 onload 所以代码实际上看起来像
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设置为运行(jsFiddle设置),你需要将函数设为全局,或者最好的解决方案,绑定事件使用 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;
}