从单元格内更改 innerHTML
Change innerHTML from within cell
我正在制作一个带有 table 的页面,其中每个 td 都可以通过单击进行编辑。
每个td的onclick是如下js函数:
var createInput = function (e) {
e.innerHTML = "<button id = 'option1' onclick = updateComplete(this)><span>Complete</span></button><button id = 'option2' onclick = updatePartial()><span>Partial</span></button>";
setRowHeights(); //not important
}
所以 td 最终看起来像这样:
<td title="Y" id="0:2" onclick="createInput(this)" class="options">
<button id="option1" onclick="updateComplete(this)">
<span>Complete</span>
</button>
<button id="option2" onclick="updatePartial()">
<span>Partial</span>
</button>
</td>
如果单击 "complete" 按钮,我希望整个单元格的 innerHTML 更改,以便它只显示单词 "complete":
var updateComplete = function (e) {
var cell = e.parentElement
cell.innerHTML = "complete";
}
但是,这不起作用。除了当我查看 Chrome 中的元素时,没有任何反应,td 和按钮的标签呈粉红色:
然而,
如果我在 td 上执行第一个 clcik 这样按钮就会出现,然后 运行 这个明确引用单元格 ID 的其他函数...
var updateCompleteOther = function () {
var cell = document.getElementById("0:2");
cell.innerHTML = "complete";
}
...有效。
为什么我不能通过 td 内的按钮更改 td 的 innerHTML?
已在 https://jsfiddle.net/szn21qcx/
为您创建 fiddle
你缺少的是event.stopPropagation();
它防止事件在 DOM 树中冒泡,从而防止任何父处理程序收到事件通知。
function updateComplete (e, ctrl) {
var cell = ctrl.parentElement;
cell.innerHTML = "complete";
e.stopPropagation();
}
您可以从 here
阅读更多关于事件传播的信息
我正在制作一个带有 table 的页面,其中每个 td 都可以通过单击进行编辑。
每个td的onclick是如下js函数:
var createInput = function (e) {
e.innerHTML = "<button id = 'option1' onclick = updateComplete(this)><span>Complete</span></button><button id = 'option2' onclick = updatePartial()><span>Partial</span></button>";
setRowHeights(); //not important
}
所以 td 最终看起来像这样:
<td title="Y" id="0:2" onclick="createInput(this)" class="options">
<button id="option1" onclick="updateComplete(this)">
<span>Complete</span>
</button>
<button id="option2" onclick="updatePartial()">
<span>Partial</span>
</button>
</td>
如果单击 "complete" 按钮,我希望整个单元格的 innerHTML 更改,以便它只显示单词 "complete":
var updateComplete = function (e) {
var cell = e.parentElement
cell.innerHTML = "complete";
}
但是,这不起作用。除了当我查看 Chrome 中的元素时,没有任何反应,td 和按钮的标签呈粉红色:
然而,
如果我在 td 上执行第一个 clcik 这样按钮就会出现,然后 运行 这个明确引用单元格 ID 的其他函数...
var updateCompleteOther = function () {
var cell = document.getElementById("0:2");
cell.innerHTML = "complete";
}
...有效。
为什么我不能通过 td 内的按钮更改 td 的 innerHTML?
已在 https://jsfiddle.net/szn21qcx/
为您创建 fiddle你缺少的是event.stopPropagation();
它防止事件在 DOM 树中冒泡,从而防止任何父处理程序收到事件通知。
function updateComplete (e, ctrl) {
var cell = ctrl.parentElement;
cell.innerHTML = "complete";
e.stopPropagation();
}
您可以从 here
阅读更多关于事件传播的信息