使用香草 JS 重新计算更改事件的数字
Recalculate a number on change event using vanilla JS
我正在构建一个简单的乘法形式,它计算总和并将答案直接呈现给 DOM。我正在使用 <select>
菜单来选择初始数字,并使用 <input type="number">
作为乘数。
是否可以在更改 <select>
值时重新计算答案并将其自动呈现给 DOM?该表格目前有效,但用户需要在重新选择初始数字后删除乘数。
这是我目前所在的位置:
const selectValIn = document.querySelector(".select-val-in");
const inputValIn = document.querySelector(".input-val-in");
const valOut = document.querySelector(".val-out");
let multiplier = 2;
selectValIn.addEventListener("change", switchValIn);
inputValIn.addEventListener("keyup", convert);
function switchValIn() {
let selectedVal = selectValIn.value;
if (selectedVal === "four") {
multiplier = 4;
} else if (selectedVal === "six") {
multiplier = 6;
} else if (selectedVal === "eight") {
multiplier = 8;
}
}
function convert(e) {
const inputValIn = e.target.value;
const multiplication = inputValIn * multiplier;
valOut.innerText = multiplication;
}
<div class="converter">
<div class="converter-row">
<select class="select-val-in">
<option value="two">2</option>
<option value="four">4</option>
<option value="six">6</option>
<option value="eight">8</option>
</select>
</div>
<div class="converter-row">
<label>Multiplied by:</label>
<input class="input-val-in" type="number" value="0" />
</div>
<div class="converter-row">
<p>Equals: <span class="val-out">0</span></p>
</div>
</div>
这是一个带有工作示例的 Codepen:https://codepen.io/abbasarezoo/pen/59776227c017d1c1a3a245a37c305e76
无需存储更改,只需在发生更改时调用计算函数并从中获取值即可。删除状态使函数更简单,更不容易出错。
// Selectors
const selectValIn = document.querySelector(".select-val-in");
const inputValIn = document.querySelector(".input-val-in");
const valOut = document.querySelector(".val-out");
// Calculate
function calculate() {
const value = Number(inputValIn.value);
const multiplier = Number(selectValIn.value);
valOut.innerText = value * multiplier;
}
// Event listeners
selectValIn.addEventListener("change", calculate);
inputValIn.addEventListener("input", calculate);
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.converter-row {
margin: 0 0 1rem;
}
<div class="converter">
<div class="converter-row">
<select class="select-val-in">
<option value="2" selected>2</option>
<option value="4">4</option>
<option value="6">6</option>
<option value="8">8</option>
</select>
</div>
<div class="converter-row">
<label>Multiplied by:</label>
<input class="input-val-in" type="number" value="0" />
</div>
<div class="converter-row">
<p>Equals: <span class="val-out">0</span></p>
</div>
</div>
您是否尝试过存储您的 inputValIn 以及您的乘数?这样,您只需在 switchValIn 函数内部进行检查,看看 inputValIn 是否已经存在,在这种情况下,您可以立即进行乘法和渲染。
另一种方法是设置一个默认的输入值,这样您就不必进行检查,而是 运行 每次它们中的任何一个发生变化时都进行乘法运算
看看下面的例子。另请查看 following 以了解 change
和 input
之间的区别。
const selectValIn = document.querySelector(".select-val-in");
const inputValIn = document.querySelector(".input-val-in");
const valOut = document.querySelector(".val-out");
selectValIn.addEventListener("input", calculate);
inputValIn.addEventListener("input", calculate);
function calculate()
{
valOut.innerText = Number(inputValIn.value) * Number(selectValIn.value);
}
<div class="converter">
<div class="converter-row">
<select class="select-val-in">
<option value="2">2</option>
<option value="4">4</option>
<option value="6">6</option>
<option value="8">8</option>
</select>
</div>
<div class="converter-row">
<label>Multiplied by:</label>
<input class="input-val-in" type="number" value="0" />
</div>
<div class="converter-row">
<p>Equals: <span class="val-out">0</span></p>
</div>
</div>
另请注意,开关可能更易于阅读:
// Easier to read
switch(selectedVal)
{
case 'two':
multiplier = 2;
break;
case 'four':
multiplier = 4;
break;
case 'six':
multiplier = 6;
break;
case 'eigth':
multiplier = 8;
break;
}
我正在构建一个简单的乘法形式,它计算总和并将答案直接呈现给 DOM。我正在使用 <select>
菜单来选择初始数字,并使用 <input type="number">
作为乘数。
是否可以在更改 <select>
值时重新计算答案并将其自动呈现给 DOM?该表格目前有效,但用户需要在重新选择初始数字后删除乘数。
这是我目前所在的位置:
const selectValIn = document.querySelector(".select-val-in");
const inputValIn = document.querySelector(".input-val-in");
const valOut = document.querySelector(".val-out");
let multiplier = 2;
selectValIn.addEventListener("change", switchValIn);
inputValIn.addEventListener("keyup", convert);
function switchValIn() {
let selectedVal = selectValIn.value;
if (selectedVal === "four") {
multiplier = 4;
} else if (selectedVal === "six") {
multiplier = 6;
} else if (selectedVal === "eight") {
multiplier = 8;
}
}
function convert(e) {
const inputValIn = e.target.value;
const multiplication = inputValIn * multiplier;
valOut.innerText = multiplication;
}
<div class="converter">
<div class="converter-row">
<select class="select-val-in">
<option value="two">2</option>
<option value="four">4</option>
<option value="six">6</option>
<option value="eight">8</option>
</select>
</div>
<div class="converter-row">
<label>Multiplied by:</label>
<input class="input-val-in" type="number" value="0" />
</div>
<div class="converter-row">
<p>Equals: <span class="val-out">0</span></p>
</div>
</div>
这是一个带有工作示例的 Codepen:https://codepen.io/abbasarezoo/pen/59776227c017d1c1a3a245a37c305e76
无需存储更改,只需在发生更改时调用计算函数并从中获取值即可。删除状态使函数更简单,更不容易出错。
// Selectors
const selectValIn = document.querySelector(".select-val-in");
const inputValIn = document.querySelector(".input-val-in");
const valOut = document.querySelector(".val-out");
// Calculate
function calculate() {
const value = Number(inputValIn.value);
const multiplier = Number(selectValIn.value);
valOut.innerText = value * multiplier;
}
// Event listeners
selectValIn.addEventListener("change", calculate);
inputValIn.addEventListener("input", calculate);
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.converter-row {
margin: 0 0 1rem;
}
<div class="converter">
<div class="converter-row">
<select class="select-val-in">
<option value="2" selected>2</option>
<option value="4">4</option>
<option value="6">6</option>
<option value="8">8</option>
</select>
</div>
<div class="converter-row">
<label>Multiplied by:</label>
<input class="input-val-in" type="number" value="0" />
</div>
<div class="converter-row">
<p>Equals: <span class="val-out">0</span></p>
</div>
</div>
您是否尝试过存储您的 inputValIn 以及您的乘数?这样,您只需在 switchValIn 函数内部进行检查,看看 inputValIn 是否已经存在,在这种情况下,您可以立即进行乘法和渲染。
另一种方法是设置一个默认的输入值,这样您就不必进行检查,而是 运行 每次它们中的任何一个发生变化时都进行乘法运算
看看下面的例子。另请查看 following 以了解 change
和 input
之间的区别。
const selectValIn = document.querySelector(".select-val-in");
const inputValIn = document.querySelector(".input-val-in");
const valOut = document.querySelector(".val-out");
selectValIn.addEventListener("input", calculate);
inputValIn.addEventListener("input", calculate);
function calculate()
{
valOut.innerText = Number(inputValIn.value) * Number(selectValIn.value);
}
<div class="converter">
<div class="converter-row">
<select class="select-val-in">
<option value="2">2</option>
<option value="4">4</option>
<option value="6">6</option>
<option value="8">8</option>
</select>
</div>
<div class="converter-row">
<label>Multiplied by:</label>
<input class="input-val-in" type="number" value="0" />
</div>
<div class="converter-row">
<p>Equals: <span class="val-out">0</span></p>
</div>
</div>
另请注意,开关可能更易于阅读:
// Easier to read
switch(selectedVal)
{
case 'two':
multiplier = 2;
break;
case 'four':
multiplier = 4;
break;
case 'six':
multiplier = 6;
break;
case 'eigth':
multiplier = 8;
break;
}