javascript - javascript onclick事件没有鼠标点击响应
问题描述
<p>2 + 4 = <span onclick='this.document.getElementsByTagName("p").item(0).innerHTML = eval(2+4)'>답</span></p>
<p>4 * 20 + 64 = <span onclick='this.document.getElementsByTagName("p").item(1).innerHTML = eval(4*20+64)'>답</span></p>
<p>20 / 5 - 8 * 2 = <span onclick='this.document.getElementsByTagName("p").item(2).innerHTML = 20/5 - 8*2'>답</span></p>
我想点击“답”输出数学表达式的答案但是,不起作用
解决方案
在一个onclick
属性中,this
表示(事件的)目标元素,所以它不是window
,而是 clicked span
。
所以你可以做只是this.innerHTML = 2+4
,...等。事实上,我更喜欢this.textContent
在这里使用,因为您不打算注入 HTML 编码,而是纯文本。
顺便说一句:eval
不需要。
<p>2 + 4 = <span onclick='this.textContent = 2+4'>답</span></p>
<p>4 * 20 + 64 = <span onclick='this.textContent = 4*20+64'>답</span></p>
<p>20 / 5 - 8 * 2 = <span onclick='this.textContent = 20/5 - 8*2'>답</span></p>
为了使其更具动态性,您可以使用eval
,这样您就不需要重复公式:
document.addEventListener("click", function(e) {
if (e.target.className == "calc") {
let formula = e.target.parentNode.textContent.split("=")[0];
e.target.textContent = eval(formula);
}
});
<p>2 + 4 = <span class="calc">답</span></p>
<p>4 * 20 + 64 = <span class="calc">답</span></p>
<p>20 / 5 - 8 * 2 = <span class="calc">답</span></p>
请注意,这种情况下的 JavaScript 需要在 script
标记中。
推荐阅读
- css - 如何在 Firefox 中使我的 SVG 元素上的 CSS @keyframes 动画更流畅且资源占用更少?
- arduino - 使用 .contains 时,错误 'class String' 没有名为 'contains' 的成员
- c# - no_connection_could 因为目标机器主动拒绝了
- javascript - Javascript 文件选择对话框 eventListener 未被调用
- vuetify.js - 如何淡出 Vuetify v-data-table 行
- r - R新手,有人可以解释一下下面的代码吗?
- indentation - 在 nano 中粘贴文本时如何消除级联缩进?
- c++ - 试图找到已删除的函数
- firebase - 使用 Kotlin 和 MVVM 的 Firebase 授权
- javafx - JavaFx 多行选项卡标题