Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新手javascript提示计算器问题_Javascript - Fatal编程技术网

新手javascript提示计算器问题

新手javascript提示计算器问题,javascript,Javascript,所以我才真正开始我的javascript之旅。我只是刚刚开始DOM操作,对很多javascript还是很陌生的…你可以从我的代码中看出这一点 我正在摆弄一个tip计算器(我猜是相当标准的新手项目),在DOM以及如何从输入(文本和广播)中选择某些元素并让它们提交方面遇到了真正的困难 任何关于我下面代码的建议都会很棒。我洗耳恭听,准备为所有的错误挨打……但我非常渴望知道我做错了什么 <form class="container"> <h2>Tip Calcul

所以我才真正开始我的javascript之旅。我只是刚刚开始DOM操作,对很多javascript还是很陌生的…你可以从我的代码中看出这一点

我正在摆弄一个tip计算器(我猜是相当标准的新手项目),在DOM以及如何从输入(文本和广播)中选择某些元素并让它们提交方面遇到了真正的困难

任何关于我下面代码的建议都会很棒。我洗耳恭听,准备为所有的错误挨打……但我非常渴望知道我做错了什么

<form class="container">
        <h2>Tip Calculator</h2>
        <p>Enter Bill Amount</p>
        <input type="text" class="input-styles" placeholder="£££" id="bill-amount">
        <p>Select Percentage Of Bill</p>
        <div class="radio-container">
            <div class="radio-styles">                        <p>10%</p>
                <input type="radio" class="radio-styles" name="tip-percent" value="0.1">
            </div>
            <div class="radio-styles">
                <p>15%</p>
                <input type="radio" class="radio-styles" name="tip-percent" value="0.15">
            </div>
              <div class="radio-styles">
                <p>20%</p>
                <input type="radio" class="radio-styles" name="tip-percent" value="0.2">
            </div>
            <div class="radio-styles">
                <p>25%</p>
                <input type="radio" class="radio-styles" name="tip-percent" value="0.25">
            </div>
        </div>
        <div class="submit-container">
            <button type="submit" name="tip-submit" id="submit-button">submit</button>
        </div>
        <div class="totals-container">
            <div class="totals">
                <h2>Tip To Pay</h2>
                <h2 id="tip-to-pay"></h2>
                <h2 id="bill-final">Total Bill To Pay</h2>
                <h2 id="bill-to-pay"></h2>
            </div>
        </div>
    </form>
用我下面的钢笔可能更容易看到这个!

HTML 在HTML中,您正在用
-表单通常用于向web服务器发送数据、提交或验证等。在本例中,您只是将其用作容器,因此可以坚持使用标准

这导致您提交时计算器消失的问题

JavaScript 范围界定最初,您是在全局范围内定义所有变量,而不是在函数范围内。这通常是可以避免的,因为它可能会导致变量覆盖问题、无法跟踪更改、通常是意外行为-

函数-函数可能是作用域的产物,但一般来说,您希望函数接受输入并返回值,而不是修改函数作用域之外的值-返回输出有助于避免意外更改,而使用参数输入值则允许更多的控制和可读性

在这段代码中,我不想直接使用函数和执行数学运算,因为它很简单&只调用了一次——但是您可以自由地做您想做的事情

//这将全局更改tip的值,同时还将使用百分比和账单的设置变量
函数calcTip(){
小费=百分比*账单
}
//这允许我们将函数的输出返回到所选变量
//同时也接受我们想要的投入
功能计算(百分比,账单){
返回百分比*票据;
}
设tip=calcTip(0.10120);//返回12;


类型-在主函数中,检索元素的
,并将其分配给
账单
百分比
。但是,
.value
将返回一个字符串,而不管输入是“a”字符还是“2”字符-这在您尝试添加值时会导致问题,因为添加操作符
+
在与字符串数字一起使用时会执行不同的操作

例如,当与字符串数字一起使用时,它只会将这两个变量合并在一起,而不会像您预期的那样将它们相加

让a=“5”//类型:字符串
设b=120;//类型:编号
a+b/“5120”
当与两个数字一起使用时,可以看到正确的行为

设a=5;//类型:编号
设b=120;//类型:编号
a+b//125
在您的例子中,我们可以使用and-parseInt将字符串值
bill
&
percent
转换为数字,而parseFloat将转换为浮点数


代码片段中还有一些小改动,但在您将其发布到代码审阅之前,这对您来说只是一些快速的事情-这绝对不是一种正确的方式,有很多,但希望它能帮助您继续前进

document.getElementById('submit-button')。addEventListener('click',function(){
//获得账单金额
let bill=parseInt(document.getElementById('bill-amount').value);
//从所选复选框中获取百分比
/*let percent=document.getElementsByName('tip-percent')*/
let percent=parseFloat(document.querySelector('input[name=“tip percent”]:checked')。值);
//如果这些函数很简单,就没有理由将它们作为函数&只调用一次
小费=百分之*账单;
让finalBill=账单+小费;
//在html中添加结果
document.getElementById('tip-to-pay')。textContent='$'+tip;
document.getElementById('bill-to-pay')。textContent='$'+最终票据;
//显示结果
document.querySelector(“.totals容器”).style.display='flex';
})
*{
保证金:0;
填充:0;
}
html{
字体系列:zilla slab;
字号:18px;
字体大小:300;
背景图片:url(imgs/restaurant.jpg);
背景位置:中心;
}
.第页{
显示器:flex;
证明内容:中心;
对齐项目:居中;
}
.集装箱{
显示器:flex;
证明内容:中心;
弯曲方向:立柱;
背景色:rgba(204238255,0.9);
填充:50px 100px 50px 100px;
利润率最高:2%;
文本对齐:居中;
盒影:0px 8px 40px rgba(0,0,0,0.5),0px 10px 20px rgba(0,0,0,0.7);
边界半径:40px;
}
.容器>h2{
垫底:1.6rem;
字体大小:2.5rem;
}
.container>p{
垫底:1毫米;
字体大小:1.5rem;
}
.container>输入{
文本对齐:居中;
填充:4px;
字号:1.2rem;
宽度:160px;
左缘:19%;
边缘底部:1rem;
}
.无线电集装箱{
显示器:flex;
证明内容:之间的空间;
}
.无线电信箱{
显示器:flex;
文本对齐:居中;
对齐项目:居中;
弯曲方向:立柱;
}
.广播风格{
裕度:10px 0 1.2rem 0;
光标:指针;
大纲:无;
}
钮扣{
填充:8px 40px 8px 40px;
文本转换:大写;
背景色:#fff;
边界:无;
边界半径:45px;
盒影:0px 8px 15px rgba(0,0,0,0.3);
转换:所有0.3秒到0秒;
光标:指针;
大纲:无;
字体系列:zilla slab;
字体大小:300;
字号:1rem;
}
.集装箱总数{
显示:无;
}
.总数{
显示器:flex;
弯曲
var bill, percent, tip, finalBill;


document.getElementById('submit-button').addEventListener('click', function() {

// get bill amount
bill = document.getElementById('bill-amount').value

//get percent amount from checkboxes
percent = document.getElementsByName('tip-percent').checked;
tip = calcTip();
finalBill = finalAmount();

// edit results in html
document.getElementById('tip-to-pay').textContent = tip;
document.getElementById('bill-to-pay').textContent = finalBill;

// display result
document.querySelector('.totals-container').style.display = 'flex';

}

function calcTip() {
    tip = percent * bill
}

function finalAmount() {
    finalBill = tip + bill
}