想从 getshare() 函数中获取 return 值,但它没有 returning 任何东西。有没有其他方法?
Want to return value from getshare() function but it is not returning anything. Is there any alternative approach?
const btns = document.querySelector(".col");
const share = Array.from(btns.children);
console.log(share)
let share_percentage = getshare();
function getshare(){
let share_value;
share.forEach(btn=>{
btn.addEventListener("click",function(){
share.forEach((btn)=>{
btn.classList.remove("active");
})
if(btn.id!="input-share"){
let btn_value = btn.innerHTML.replace("%","");
btn.classList.toggle("active");
share_value = btn_value;
}
else{
btn_value = getinputshare();
btn.addEventListener("click",function(){
btn.classList.toggle("active-input");
share_value = btn_value;
})
}
return share_value;
})
})
}
function getinputshare(){
return document.getElementById("input-share").value;
}
function getbill(){
let bill_value = document.getElementById("bill").value;
return bill_value;
}
function getpeople(){
let people_value = document.getElementById("people").value;
return people_value;
}
function tipcalculate(){
let a = getbill();
console.log(a);
let b = share_percentage;
console.log(b);
let c = getpeople();
console.log(c);
let tip_amount = (a*b)/(100*c);
console.log(tip_amount)
}
const reset = document.getElementById("reset");
reset.addEventListener("click",function(){
tipcalculate();
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Tip Spiltter</title>
<link rel="stylesheet" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://kit.fontawesome.com/124816636a.js" crossorigin="anonymous"></script>
<script src="script.js" defer></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@100;300;400;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
</head>
<body>
<h1>SPLI <br>TTER</h1>
<div class="main">
<div class="container-section">
<div class="container">
<h4>Bill</h4>
<input type="number" placeholder="0" id="bill" onblur="getbill()">
<span>$</span>
</div>
<div class="container" id="middle-container">
<h4>Select Tip %</h4>
<div class="row">
<div class="col">
<button>5%</button>
<button>10%</button>
<button>15%</button>
<button>25%</button>
<button>50%</button>
<input type="number" placeholder="Custom" id="input-share" onblur="getinputshare()">
</div>
</div>
</div>
<div class="container">
<h4>Number of People</h4>
<input type="number" placeholder="0" id="people" onblur="getpeople()">
<span id="person"><img src="images/icon-person.svg" alt=""></span>
</div>
</div>
<div class="calculator">
<h4>Tip Amount</h4>
<div class="result">
<span>/ person</span>
<h1>[=12=].00</h1>
</div>
<h4>Total</h4>
<div class="result">
<span>/ person</span>
<h1>[=12=].00</h1>
</div>
<button id="reset">RESET</button>
</div>
</div>
</body>
</html>
要计算小费,我需要三个值:bill_value、share_value、people_value。
我面临的唯一问题是 share_value。在 tipcalculate() 函数中
未读取其值并给出未定义的值。我用谷歌搜索并发现了那个值
不能从 foreach 返回,所以有没有其他方法可以执行
同样的操作,也得到share_value。
const btns = document.querySelector(".col");
const share = Array.from(btns.children);
console.log(share)
let share_percentage = getshare();
function getshare(){
let share_value;
share.forEach(btn=>{
btn.addEventListener("click",function(){
share.forEach((btn)=>{
btn.classList.remove("active");
})
if(btn.id!="input-share"){
let btn_value = btn.innerHTML.replace("%","");
btn.classList.toggle("active");
share_value = btn_value;
}
else{
btn_value = getinputshare();
btn.addEventListener("click",function(){
btn.classList.toggle("active-input");
share_value = btn_value;
})
}
return share_value;
})
})
}
function getinputshare(){
return document.getElementById("input-share").value;
}
function getbill(){
let bill_value = document.getElementById("bill").value;
return bill_value;
}
function getpeople(){
let people_value = document.getElementById("people").value;
return people_value;
}
function tipcalculate(){
let a = getbill();
console.log(a);
let b = share_percentage;
console.log(b);
let c = getpeople();
console.log(c);
let tip_amount = (a*b)/(100*c);
console.log(tip_amount)
}
const reset = document.getElementById("reset");
reset.addEventListener("click",function(){
tipcalculate();
})
另一种方法是给你的按钮一个 class 和值:
<div class="col">
<button value="5" class="percent-btn">5%</button>
<button value="10" class="percent-btn">10%</button>
<button value="15" class="percent-btn">15%</button>
<button value="25" class="percent-btn">25%</button>
<button value="50" class="percent-btn">50%</button>
<input type="number" placeholder="Custom" id="input-share" />
</div>
然后给整个添加一个事件监听器div。当点击事件目标是按钮时,将其值保存到 share_percentage
变量:
let share_percentage
...
const per = document.querySelector('.col')
per.addEventListener('click', e => {
if (e.target.tagName == 'BUTTON') {
percentBtns.forEach(b => b.classList.remove('active'))
e.target.classList.add('active')
share_percentage = e.target.value
customPercent.value = '' // clear the custom percent value
}
})
并为自定义小费百分比输入添加一个 change 事件侦听器。在这里,我将其值保存到 share_percentage
并从其他百分比按钮中删除 active
class。
const customPercent = document.getElementById('input-share')
customPercent.addEventListener('change', () => {
percentBtns.forEach(b => b.classList.remove('active'))
share_percentage = customPercent.value
// do more stuff
})
这是一个包含相关部分的工作示例:
const percentBtns = [...document.querySelectorAll('.percent-btn')]
let share_percentage
const per = document.querySelector('.col')
per.addEventListener('click', e => {
if (e.target.tagName == 'BUTTON') {
percentBtns.forEach(b => b.classList.remove('active'))
e.target.classList.add('active')
share_percentage = e.target.value
customPercent.value = ''
}
})
const customPercent = document.getElementById('input-share')
customPercent.addEventListener('change', () => {
percentBtns.forEach(b => b.classList.remove('active'))
share_percentage = customPercent.value
// do more stuff
})
function getbill() {
return document.getElementById('bill').value
}
function getpeople() {
return document.getElementById('people').value
}
function tipcalculate() {
let a = getbill()
console.log('getbill() = ', a)
let b = share_percentage
console.log('share_percentage = ', b)
let c = getpeople()
console.log('getpeople() = ', c)
let tip_amount = (a * b) / (100 * c)
console.log('tip_amount = ', tip_amount)
return tip_amount
}
const reset = document.getElementById('reset')
reset.addEventListener('click', function() {
console.clear()
tipcalculate()
})
* {
margin: 0;
padding: 0;
}
.box {
margin: 0 10px 7px 10px;
padding: 0 4px;
}
.active {
background-color: red;
}
<div class="box">
<h5>Bill</h5>
<input type="number" placeholder="0" id="bill" onblur="getbill()" />
<span>$</span>
</div>
<div class="box">
<h5>Select Tip %</h5>
<div class="col">
<button value="5" class="percent-btn">5%</button>
<button value="10" class="percent-btn">10%</button>
<button value="15" class="percent-btn">15%</button>
<button value="25" class="percent-btn">25%</button>
<button value="50" class="percent-btn">50%</button>
<input type="number" placeholder="Custom" id="input-share" />
</div>
</div>
<div class="box">
<h5>Number of People</h5>
<input type="number" placeholder="0" id="people" />
<button id="reset">Calculate Tip</button>
</div>
const btns = document.querySelector(".col");
const share = Array.from(btns.children);
console.log(share)
let share_percentage = getshare();
function getshare(){
let share_value;
share.forEach(btn=>{
btn.addEventListener("click",function(){
share.forEach((btn)=>{
btn.classList.remove("active");
})
if(btn.id!="input-share"){
let btn_value = btn.innerHTML.replace("%","");
btn.classList.toggle("active");
share_value = btn_value;
}
else{
btn_value = getinputshare();
btn.addEventListener("click",function(){
btn.classList.toggle("active-input");
share_value = btn_value;
})
}
return share_value;
})
})
}
function getinputshare(){
return document.getElementById("input-share").value;
}
function getbill(){
let bill_value = document.getElementById("bill").value;
return bill_value;
}
function getpeople(){
let people_value = document.getElementById("people").value;
return people_value;
}
function tipcalculate(){
let a = getbill();
console.log(a);
let b = share_percentage;
console.log(b);
let c = getpeople();
console.log(c);
let tip_amount = (a*b)/(100*c);
console.log(tip_amount)
}
const reset = document.getElementById("reset");
reset.addEventListener("click",function(){
tipcalculate();
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Tip Spiltter</title>
<link rel="stylesheet" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://kit.fontawesome.com/124816636a.js" crossorigin="anonymous"></script>
<script src="script.js" defer></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@100;300;400;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
</head>
<body>
<h1>SPLI <br>TTER</h1>
<div class="main">
<div class="container-section">
<div class="container">
<h4>Bill</h4>
<input type="number" placeholder="0" id="bill" onblur="getbill()">
<span>$</span>
</div>
<div class="container" id="middle-container">
<h4>Select Tip %</h4>
<div class="row">
<div class="col">
<button>5%</button>
<button>10%</button>
<button>15%</button>
<button>25%</button>
<button>50%</button>
<input type="number" placeholder="Custom" id="input-share" onblur="getinputshare()">
</div>
</div>
</div>
<div class="container">
<h4>Number of People</h4>
<input type="number" placeholder="0" id="people" onblur="getpeople()">
<span id="person"><img src="images/icon-person.svg" alt=""></span>
</div>
</div>
<div class="calculator">
<h4>Tip Amount</h4>
<div class="result">
<span>/ person</span>
<h1>[=12=].00</h1>
</div>
<h4>Total</h4>
<div class="result">
<span>/ person</span>
<h1>[=12=].00</h1>
</div>
<button id="reset">RESET</button>
</div>
</div>
</body>
</html>
要计算小费,我需要三个值:bill_value、share_value、people_value。 我面临的唯一问题是 share_value。在 tipcalculate() 函数中 未读取其值并给出未定义的值。我用谷歌搜索并发现了那个值 不能从 foreach 返回,所以有没有其他方法可以执行 同样的操作,也得到share_value。
const btns = document.querySelector(".col");
const share = Array.from(btns.children);
console.log(share)
let share_percentage = getshare();
function getshare(){
let share_value;
share.forEach(btn=>{
btn.addEventListener("click",function(){
share.forEach((btn)=>{
btn.classList.remove("active");
})
if(btn.id!="input-share"){
let btn_value = btn.innerHTML.replace("%","");
btn.classList.toggle("active");
share_value = btn_value;
}
else{
btn_value = getinputshare();
btn.addEventListener("click",function(){
btn.classList.toggle("active-input");
share_value = btn_value;
})
}
return share_value;
})
})
}
function getinputshare(){
return document.getElementById("input-share").value;
}
function getbill(){
let bill_value = document.getElementById("bill").value;
return bill_value;
}
function getpeople(){
let people_value = document.getElementById("people").value;
return people_value;
}
function tipcalculate(){
let a = getbill();
console.log(a);
let b = share_percentage;
console.log(b);
let c = getpeople();
console.log(c);
let tip_amount = (a*b)/(100*c);
console.log(tip_amount)
}
const reset = document.getElementById("reset");
reset.addEventListener("click",function(){
tipcalculate();
})
另一种方法是给你的按钮一个 class 和值:
<div class="col">
<button value="5" class="percent-btn">5%</button>
<button value="10" class="percent-btn">10%</button>
<button value="15" class="percent-btn">15%</button>
<button value="25" class="percent-btn">25%</button>
<button value="50" class="percent-btn">50%</button>
<input type="number" placeholder="Custom" id="input-share" />
</div>
然后给整个添加一个事件监听器div。当点击事件目标是按钮时,将其值保存到 share_percentage
变量:
let share_percentage
...
const per = document.querySelector('.col')
per.addEventListener('click', e => {
if (e.target.tagName == 'BUTTON') {
percentBtns.forEach(b => b.classList.remove('active'))
e.target.classList.add('active')
share_percentage = e.target.value
customPercent.value = '' // clear the custom percent value
}
})
并为自定义小费百分比输入添加一个 change 事件侦听器。在这里,我将其值保存到 share_percentage
并从其他百分比按钮中删除 active
class。
const customPercent = document.getElementById('input-share')
customPercent.addEventListener('change', () => {
percentBtns.forEach(b => b.classList.remove('active'))
share_percentage = customPercent.value
// do more stuff
})
这是一个包含相关部分的工作示例:
const percentBtns = [...document.querySelectorAll('.percent-btn')]
let share_percentage
const per = document.querySelector('.col')
per.addEventListener('click', e => {
if (e.target.tagName == 'BUTTON') {
percentBtns.forEach(b => b.classList.remove('active'))
e.target.classList.add('active')
share_percentage = e.target.value
customPercent.value = ''
}
})
const customPercent = document.getElementById('input-share')
customPercent.addEventListener('change', () => {
percentBtns.forEach(b => b.classList.remove('active'))
share_percentage = customPercent.value
// do more stuff
})
function getbill() {
return document.getElementById('bill').value
}
function getpeople() {
return document.getElementById('people').value
}
function tipcalculate() {
let a = getbill()
console.log('getbill() = ', a)
let b = share_percentage
console.log('share_percentage = ', b)
let c = getpeople()
console.log('getpeople() = ', c)
let tip_amount = (a * b) / (100 * c)
console.log('tip_amount = ', tip_amount)
return tip_amount
}
const reset = document.getElementById('reset')
reset.addEventListener('click', function() {
console.clear()
tipcalculate()
})
* {
margin: 0;
padding: 0;
}
.box {
margin: 0 10px 7px 10px;
padding: 0 4px;
}
.active {
background-color: red;
}
<div class="box">
<h5>Bill</h5>
<input type="number" placeholder="0" id="bill" onblur="getbill()" />
<span>$</span>
</div>
<div class="box">
<h5>Select Tip %</h5>
<div class="col">
<button value="5" class="percent-btn">5%</button>
<button value="10" class="percent-btn">10%</button>
<button value="15" class="percent-btn">15%</button>
<button value="25" class="percent-btn">25%</button>
<button value="50" class="percent-btn">50%</button>
<input type="number" placeholder="Custom" id="input-share" />
</div>
</div>
<div class="box">
<h5>Number of People</h5>
<input type="number" placeholder="0" id="people" />
<button id="reset">Calculate Tip</button>
</div>