gpt4 book ai didi

javascript - 如何访问 onclick 事件的更改值?

转载 作者:搜寻专家 更新时间:2023-10-31 23:17:40 25 4
gpt4 key购买 nike

我是 javascript 的初学者,正在做 MMA 评分,我想知道如何访问 result1Red 的更改值。

<span><a id="result1Red">0</a></span>

通过选择激活其相应功能的按钮之一进行更改:

function tenRed1() {
var i = 10;
result1Red += 1*i;
if (result1Red > 10) {return;}
document.getElementById("result1Red").innerHTML = result1Red;
};

function nineRed1() {
var i = 9;
result1Red += 1*i;
if (result1Red > 10) {return;}
document.getElementById("result1Red").innerHTML = result1Red;
};

function eightRed1() {
var i = 8;
result1Red += 1*i;
if (result1Red > 10) {return;}
document.getElementById("result1Red").innerHTML = result1Red;
};

当我尝试使用“innerHTML”时,它返回 0(初始值)而不是确定的值。我需要这个值与其他输入相加并得到总结果。

完整代码:

// Round 1
function tenRed1() {
var i = 10;
result1Red += 1*i;
if (result1Red > 10) {return;}
document.getElementById("result1Red").innerHTML = result1Red;
};

function nineRed1() {
var i = 9;
result1Red += 1*i;
if (result1Red > 10) {return;}
document.getElementById("result1Red").innerHTML = result1Red;
};

function eightRed1() {
var i = 8;
result1Red += 1*i;
if (result1Red > 10) {return;}
document.getElementById("result1Red").innerHTML = result1Red;
};

function tenBlue1() {
var i = 10;
result1Blue += 1*i;
if (result1Blue > 10) {return;}
document.getElementById("result1Blue").innerHTML = result1Blue;
};

function nineBlue1() {
var i = 9;
result1Blue += 1*i;
if (result1Blue > 10) {return;}
document.getElementById("result1Blue").innerHTML = result1Blue;
};

function eightBlue1() {
var i = 8;
result1Blue += 1*i;
if (result1Blue > 10) {return;}
document.getElementById("result1Blue").innerHTML = result1Blue;
}


// Round 2
function tenRed2() {
var i = 10;
result2Red += 1*i;
if (result2Red > 10) {return;}
document.getElementById("result2Red").innerHTML = result2Red;
};

function nineRed2() {
var i = 9;
result2Red += 1*i;
if (result2Red > 10) {return;}
document.getElementById("result2Red").innerHTML = result2Red;
};

function eightRed2() {
var i = 8;
result2Red += 1*i;
if (result2Red > 10) {return;}
document.getElementById("result2Red").innerHTML = result2Red;
};

function tenBlue2() {
var i = 10;
result2Blue += 1*i;
if (result2Blue > 10) {return;}
document.getElementById("result2Blue").innerHTML = result2Blue;
};

function nineBlue2() {
var i = 9;
result2Blue += 1*i;
if (result2Blue > 10) {return;}
document.getElementById("result2Blue").innerHTML = result2Blue;
};

function eightBlue2() {
var i = 8;
result2Blue += 1*i;
if (result2Blue > 10) {return;}
document.getElementById("result2Blue").innerHTML = result2Blue;
};


// Round 3
function tenRed3() {
var i = 10;
result3Red += 1*i;
if (result3Red > 10) {return;}
document.getElementById("result3Red").innerHTML = result3Red;
};

function nineRed3() {
var i = 9;
result3Red += 1*i;
if (result3Red > 10) {return;}
document.getElementById("result3Red").innerHTML = result3Red;
};

function eightRed3() {
var i = 8;
result3Red += 1*i;
if (result3Red > 10) {return;}
document.getElementById("result3Red").innerHTML = result3Red;
};

function tenBlue3() {
var i = 10;
result3Blue += 1*i;
if (result3Blue > 10) {return;}
document.getElementById("result3Blue").innerHTML = result3Blue;
};

function nineBlue3() {
var i = 9;
result3Blue += 1*i;
if (result3Blue > 10) {return;}
document.getElementById("result3Blue").innerHTML = result3Blue;
};

function eightBlue3() {
var i = 8;
result3Blue += 1*i;
if (result3Blue> 10) {return;}
document.getElementById("result3Blue").innerHTML = result3Blue;
};
<html>
<head>
<title>MMAScore Beta</title>
<link rel="styleesheet" type="text/css" href="style/style.css">
</head>
<body>

<header>
<h1>mmaScore 0.1 Version</h1>
</header>

<!-- Round 1 -->
<div class="roundOne">
<button type="button" onclick="eightRed1()">8</button>
<button type="button" onclick="nineRed1()">9</button>
<button type="button" onclick="tenRed1()">10</button>
<span><a id="result1Red">0</a></span> -
<span><a id="result1Blue">0</a></span>
<button type="button" onclick="tenBlue1()">10</button>
<button type="button" onclick="nineBlue1()">9</button>
<button type="button" onclick="eightBlue1()">8</button>
</div>
<!-- Round 2 -->
<div class="roundTwo">
<button type="button" onclick="eightRed2()">8</button>
<button type="button" onclick="nineRed2()">9</button>
<button type="button" onclick="tenRed2()">10</button>
<span><a id="result2Red">0</a></span> -
<span><a id="result2Blue">0</a></span>
<button type="button" onclick="tenBlue2()">10</button>
<button type="button" onclick="nineBlue2()">9</button>
<button type="button" onclick="eightBlue2()">8</button>
</div>
<!-- Round 3 -->
<div class="roundThree">
<button type="button" onclick="eightRed3()">8</button>
<button type="button" onclick="nineRed3()">9</button>
<button type="button" onclick="tenRed3()">10</button>
<span><a id="result3Red">0</a></span> -
<span><a id="result3Blue">0</a></span>
<button type="button" onclick="tenBlue3()">10</button>
<button type="button" onclick="nineBlue3()">9</button>
<button type="button" onclick="eightBlue3()">8</button>
</div>



<h3>Total:</h3>
<span id="resultRed">0</span> -
<span id="resultBlue">0</span>
<footer>
</footer>



<script type="text/javascript" src="script/script.js"></script>
</body>
</html>

最佳答案

关于您的代码

首先,我想指出您的代码的几个问题并给您一些建议:

  • <span>而不是 <spam>

  • <a>标签仅用于链接,您不需要 <span><a>...</a></span>

  • 尽量少用 ìds 和类名

  • 不要使用 .innerHTML 如果您不打算添加 HTML,请使用 .textContent 相反

  • 您的 JavaScript 代码过于冗余:您已经定义了 18 个相似的函数!函数需要可重用。


提案

以下是您可以如何实现您的流程。

  • 我们将向文档添加事件监听器以监听页面内的任何点击。我们将使用 addEventListener 为此。

    document.addEventListener('click', function() {})

    如您所见,它采用事件类型 ( 'click' ) 和事件发生时将执行的回调函数。我们需要定义这个回调。

  • 回调需要首先检查被点击的项目确实是一个按钮并且它的父级(如果他有的话)有类名:.round .

    const parent = event.target.parentElement;
    if (parent && parent.classList.contains('round')) {
    ...
    }

    如果满足条件则表示用户点击了其中一个按钮。

  • 在 if block 中,我们可以开始处理 event.target这是被点击的元素(在我们的例子中它将是 <button> 元素之一)。我们将从保存一些变量开始:button (<button> 元素),amount (按钮的值)和 team (团队:'Red''Blue')。

    const button = event.target;
    const amount = button.textContent;
    const team = button.className.substr(3);
  • 然后我们将更新回合的点数:

    parent.querySelector('.result'+team).textContent = amount;
  • 最后,使用 updateTotals 更新总量:

    updateTotals('.result'+team);

完整代码:

const updateTotals = function(className) {
const total = [...document.querySelectorAll('.round '+className)]
.map(e=> parseInt(e.textContent))
.reduce((a,b) => a+b);
document.querySelector('.results > '+className).textContent = total;
};

document.addEventListener('click', function() {
const parent = event.target.parentElement;
if (parent && parent.classList.contains('round')) { // this is a <button>

const button = event.target;
const amount = button.textContent;
const team = button.className.substr(3);

// update team score
parent.querySelector('.result'+team).textContent = amount;

// update total for each team
updateTotals('.result'+team);

}
});
<h1>mmaScore 0.1 Version</h1>

<!-- Round 1 -->
<div class="round round1">
<button class="btnRed" type="button">8</button>
<button class="btnRed" type="button">9</button>
<button class="btnRed" type="button">10</button>
<span class="resultRed">0</span> -
<span class="resultBlue">0</span>
<button class="btnBlue" type="button">10</button>
<button class="btnBlue" type="button">9</button>
<button class="btnBlue" type="button">8</button>
</div>

<!-- Round 2 -->
<div class="round round2">
<button class="btnRed" type="button">8</button>
<button class="btnRed" type="button">9</button>
<button class="btnRed" type="button">10</button>
<span class="resultRed">0</span> -
<span class="resultBlue">0</span>
<button class="btnBlue" type="button">10</button>
<button class="btnBlue" type="button">9</button>
<button class="btnBlue" type="button">8</button>
</div>

<!-- Round 3 -->
<div class="round round3">
<button class="btnRed" type="button">8</button>
<button class="btnRed" type="button">9</button>
<button class="btnRed" type="button">10</button>
<span class="resultRed">0</span> -
<span class="resultBlue">0</span>
<button class="btnBlue" type="button">10</button>
<button class="btnBlue" type="button">9</button>
<button class="btnBlue" type="button">8</button>
</div>

<h3>Total:</h3>
<div class="results">
<span class="resultRed">0</span> -
<span class="resultBlue">0</span>
</div>


关于updateTotals :

该函数允许对指定团队的所有分数进行总和。它以 className 作为参数类型 String可以是 'resultRed''resultBlue' .

这是它的工作原理:

  1. 它首先选择所有点元素并展开 querySelectorAll 返回的选择成一个数组。

    [...document.querySelectorAll('.round '+className)]
  2. 然后我们可以像这样映射这个数组 HTMLElement => Number using .map

    .map(e=> parseInt(e.textContent))
  3. 然后生成的映射数组可以简化为单个整数:使用 .reduce 对数组所有元素的总和.这是关于 How to find the sum of an array of numbers 的 Stack Overflow 线程.

  4. 最后用计算出的总和更改 DOM 中团队的总数 total .

结果我们有:

const updateTotals = function(className) {
const total = [...document.querySelectorAll('.round '+className)]
.map(e=> parseInt(e.textContent))
.reduce((a,b) => a+b);
document.querySelector('.results > '+className).textContent = total;
};

关于javascript - 如何访问 onclick 事件的更改值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com