鼠标点击后无响应的javascript onclick事件

问题描述 投票:-1回答:2

<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>

我想点击"→"来输出数学表达式的答案,但是,不成功。

javascript
2个回答
0
投票

document 是一个 全球性的属性,而不是一个人的属性 span 元素。不要使用 this.


0
投票

a onclick 属性。this 代表(事件的)目标元素,所以它不是 window但是,点击了 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 标签。


0
投票

你只需要把关键字this从 this.documentdocument.getElementsByTagName.

为什么这么说呢?

document 是一个全局变量,代表浏览器中加载的任何网页,并作为进入网页内容的入口,也就是该网页的 DOM树. A 跨越 是一个 Html元素 储存在DOM树中。

通过使用 this 关键字,你是想访问 span 的属性,而不是访问 document 变量。

下面是一个完全可行的例子。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>DOM 객체 변경 - 내용 변경</title>
    </head>

    <body>
        <h1>계산해봅시다.</h1>
        <hr>

        <p>2 + 4 = <span onclick='document.getElementsByTagName("p").item(0).innerHTML = eval(2+4)'>답</span></p>
        <p>4 * 20 + 64 = <span onclick='document.getElementsByTagName("p").item(1).innerHTML = eval(4*20+64)'>답</span></p>
        <p>20 / 5 - 8 * 2 = <span onclick='document.getElementsByTagName("p").item(2).innerHTML = 20/5 - 8*2'>답</span></p>
    </body>
</html>

而不是从 dom 树中获取各自的 dom 元素,你可以使用 span 属性,并且只需通过使用 内页textContent 像这样。

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>DOM 객체 변경 - 내용 변경</title>
        </head>

        <body>
            <h1>계산해봅시다.</h1>
            <hr>

            <p>2 + 4 = <span onclick='this.innerHTML = eval(2+4)'>답</span></p>
            <p>4 * 20 + 64 = <span onclick='this.innerHTML = eval(4*20+64)'>답</span></p>
            <p>20 / 5 - 8 * 2 = <span onclick='this.innerHTML = 20/5 - 8*2'>답</span></p>
        </body>
    </html>

看看 此处 差异 innerHtmltextContent

© www.soinside.com 2019 - 2024. All rights reserved.