javascript - 无法将输入范围值正确连接到 JavaScript 计算

标签 javascript jquery html input range

我创建了(在模板上构建)一个简单的 js 表单。一切都与“ radio ”和“选择”输入一起工作,但我无法将“范围”值与其他所有内容连接起来。

这就是表单和计算的工作原理:(抱歉有很多菜鸟代码)

function showVal(newVal){
  document.getElementById("valBox").innerHTML=newVal;
}

 function valNum(){

var valNum = document.getElementById("valBox")
 }

 var cake_prices = new Array();
 cake_prices["Round6"]=9;
 cake_prices["Round8"]=11;
 cake_prices["Round10"]=12;
 

 var filling_prices= new Array();
 filling_prices["Yearone"]=12;
 filling_prices["Yeartwo"]=60;
 filling_prices["Yearthree"]=120;


 var billing_prices= new Array();
 billing_prices["Billone"]=100;
 billing_prices["Billtwo"]=200;
 billing_prices["Billthree"]=300;
  billing_prices["Billfour"]=400;
billing_prices["Billfive"]=300;

	 
	 



function getCakeSizePrice()
{  
    var cakeSizePrice=0;
    //Get a reference to the form id="cakeform"
    var theForm = document.forms["cakeform"];
    //Get a reference to the cake the user Chooses name=selectedCake":
    var selectedCake = theForm.elements["selectedcake"];
    //Here since there are 4 radio buttons selectedCake.length = 4
    //We loop through each radio buttons
    for(var i = 0; i < selectedCake.length; i++)
    {
        //if the radio button is checked
        if(selectedCake[i].checked)
        {
            //we set cakeSizePrice to the value of the selected radio button
            //i.e. if the user choose the 8" cake we set it to 25
            //by using the cake_prices array
            //We get the selected Items value
            //For example cake_prices["Round8".value]"
            cakeSizePrice = cake_prices[selectedCake[i].value];
            //If we get a match then we break out of this loop
            //No reason to continue if we get a match
            break;
        }
    }
    //We return the cakeSizePrice
    return cakeSizePrice;
}




     
function getBillingPrice()
{
    var cakeBillingPrice=0;
    //Get a reference to the form id="cakeform"
    var theForm = document.forms["cakeform"];
    //Get a reference to the select id="filling"
     var selectedBilling = theForm.elements["billing"];
     
    //set cakeFilling Price equal to value user chose
    //For example filling_prices["Lemon".value] would be equal to 5
    cakeBillingPrice = billing_prices[selectedBilling.value];

    //finally we return cakeFillingPrice
    return cakeBillingPrice;
}





function calculateTotal()
{
    //Here we get the total price by calling our function
    //Each function returns a number so by calling them we add the values they return together
    var cakePrice = (getCakeSizePrice() + getBillingPrice()) * valNum();
    var num = (cakePrice);
    var miPrice = parseInt (num - (num * .35));
    var miDiff = parseInt(cakePrice - miPrice);
    
    //display the result
    var divobj = document.getElementById('totalPrice');
    divobj.style.display='block';
    divobj.innerHTML = "Total "+cakePrice;

    var divobj = document.getElementById('miPrice');
    divobj.style.display='block';
    divobj.innerHTML = "Total "+miPrice;


    var divobj = document.getElementById('miDiff');
    divobj.style.display='block';
    divobj.innerHTML = "Total "+miDiff;

}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>Cake Form</title>
    <script type="text/javascript" src="js/formcalculations.js"></script>
    <link href="styles/cakeform.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div id="wrap">
        <form action="" id="cakeform" onsubmit="return false;">
        <div>
            <div class="cont_order">
               <fieldset>

                <label >Select your province</label>
                <label class='radiolabel'><input type="radio"  name="selectedcake" value="Round6" onclick="calculateTotal()" />SASKATCHEWAN</label><br/>
                <label class='radiolabel'><input type="radio"  name="selectedcake" value="Round8" onclick="calculateTotal()" />MANITOBA</label><br/>
                <label class='radiolabel'><input type="radio"  name="selectedcake" value="Round10" onclick="calculateTotal()" />ALBERTA</label><br/>
                <br/>

                <br/>
                <br>

                
                </br>
                
                <label >BILL</label>
         
                <select id="billing" name='billing' onchange="calculateTotal()">
                <option value="Billone">100</option>
                <option value="Billtwo">200</option>
                <option value="Billthree">300</option>
                <option value="Billfour">400</option>
                <option value="Billfive">500</option>
               </select>
                <br/>

                <label >TOTAL WITH UTILITY</label>
                <div id="totalPrice"></div>
                


                <label >TOTAL WITH MI</label>
                <div id="miPrice"></div>

                <label >TOTAL SAVED</label>
                <div id="miDiff"></div>
                <br>

                <span id="valBox"></span>
<input type="range" min="5" max="10" step="1" 
   oninput="showVal(this.value)" onchange="showVal(this.value)">
                </fieldset>
            </div>
            
        
           
        </div>  
       </form>
	</div><!--End of wrap-->
</body>
</html>

没有“范围”输入和 valNum (我创建正确吗?)功能,一切都正常。 就像我正在做的那样:

function calculateTotal()
{
    var cakePrice = (getCakeSizePrice() + getBillingPrice());
}

但是当我添加 newVal 函数时,chrome 显示总计:NaN;

function calculateTotal()
{
    var cakePrice = (getCakeSizePrice() + getBillingPrice()+newVal();
}

最佳答案

everything is working without "range" input and valNum (do i created it correctly?) function....

var cakePrice = (getCakeSizePrice() + getBillingPrice()) * valNum();

-valNum() func 不返回任何值。

but when I'm adding newVal function chrome showing me total: NaN;

var cakePrice = (getCakeSizePrice() + getBillingPrice()+newVal();

-我在代码中没有看到 newVal() 函数。有一个newVal变量,但它的作用域仅限于fucntion。

<小时/>

定义一个全局变量,然后定义函数如下:

var valNum;
function valNum(){
    valNum = document.getElementById("valBox")
}

并使用valNum,如下所示:

var cakePrice = (parseFloat(getCakeSizePrice()) + parseFloat(getBillingPrice())) * parseFloat(valNum);

关于javascript - 无法将输入范围值正确连接到 JavaScript 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37626223/

相关文章:

javascript - 当我在 ion-content 中使用 iframe 时,ion-content 滚动不起作用

javascript - 将应用程序移动到子域时出现跨域安全错误 (2018)

javascript - 过渡时 svg 矩形的动画位置

javascript - "display: none"流畅的动画

java - 无法获取 Ajax 响应中的值

javascript - 当 child 的 parent 被过滤器排除时,如何在 array.filter() 回调函数中获取他们?

javascript - 获取 div 的背景颜色 - AngularJs?

javascript - 为什么 .length 在此代码中总是返回 0?

javascript - 无法在 react 导航中将 Prop 从 Stacknavigator 传递到 DrawerNavigator

java - 如何使用 JavaScript 访问保存在请求范围内的数组或列表?