2016-04-15 20 views
0

我無法讓表單工作。我試圖獲得它,以便當我選擇不同數量的「正面和背面油墨」時,它將返回runRate值,但無論我選擇哪個數字,它都會出現「錯誤」的問題!你知道我做錯了什麼嗎?謝謝!試圖在javascript函數中傳遞下拉選擇

<html> 
 

 
<head> 
 
</head> 
 

 
<body> 
 
    <form> 
 
    <div> 
 
     <select id="ink_front"> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
     <option value="4">4</option> 
 
     </select> 
 
     <select id="ink_back"> 
 
     <option value="0">0</option> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
     <option value="4">4</option> 
 
     </select> 
 
    </div> 
 

 

 
    result 
 
    <INPUT type="text" id="result" readonly style="color:red;" /> 
 

 
    <button onclick="calculate()">submit</button> 
 
    </form> 
 
</body> 
 

 
<script type="text/javascript"> 
 
    var front_inks = document.getElementById("ink_front"); 
 
    var ink_front = front_inks.options[front_inks.selectedIndex].value; 
 

 
    var back_inks = document.getElementById("ink_back"); 
 
    var ink_back = back_inks.options[back_inks.selectedIndex].value; 
 

 
    front_inks = parseInt(front_inks); 
 
    back_inks = parseInt(back_inks); 
 

 
    function runRate(front_ink, back_ink) { 
 
    if (front_ink == 1 && back_ink == 0) { 
 
     var runRate = 6400; 
 

 
    } else if (front_ink == 2 && back_ink == 0) { 
 
     var runRate = 3200; 
 

 
    } else if (front_ink == 3 && back_ink == 0) { 
 
     var runRate = 2135; 
 

 
    } else if (front_ink == 4 && back_ink == 0) { 
 
     var runRate = 1600; 
 

 
    } else if (front_ink == 1 && back_ink == 1) { 
 
     var runRate = 3200; 
 
    } else if (front_ink == 2 && back_ink == 1) { 
 
     var runRate = 2135; 
 
    } else if (front_ink == 3 && back_ink == 1) { 
 
     var runRate = 1600; 
 
    } else if (front_ink == 4 && back_ink == 1) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 1 && back_ink == 2) { 
 
     var runRate = 2135; 
 
    } else if (front_ink == 2 && back_ink == 2) { 
 
     var runRate = 1600; 
 
    } else if (front_ink == 3 && back_ink == 2) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 4 && back_ink == 2) { 
 
     var runRate = 1070; 
 
    } else if (front_ink == 1 && back_ink == 3) { 
 
     var runRate = 1600; 
 
    } else if (front_ink == 2 && back_ink == 3) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 3 && back_ink == 3) { 
 
     var runRate = 1070; 
 
    } else if (front_ink == 4 && back_ink == 3) { 
 
     var runRate = 915; 
 
    } else if (front_ink == 1 && back_ink == 4) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 2 && back_ink == 4) { 
 
     var runRate = 1070; 
 
    } else if (front_ink == 3 && back_ink == 4) { 
 
     var runRate = 915; 
 
    } else if (front_ink == 4 && back_ink == 4) { 
 
     var runRate = 800; 
 
    } else { 
 
     var runRate = "wrong"; 
 
    } 
 

 
    return runRate; 
 
    } 
 

 

 

 
    function calculate() { 
 

 
    var run_rate = runRate(front_inks, back_inks); 
 

 
    document.getElementById("result").value = run_rate; 
 
    } 
 
</script> 
 

 
</html>

+0

編輯:謝謝你這麼多大家誰回答!這幫了我很多,非常感謝:) –

回答

0

問題是你的,如果frint_inksback_inks腳本加載權當已經得到的值。此時沒有選擇任何值...因此,您的變量不會有任何值,因此您的if,else if語句都不會有效......因此,您總是會執行其他代碼部分。

解決方法:如果你的front_inksback_inks內的計算功能得到的值,然後把它傳遞給runRate功能。當你解析爲int時,你也在玩弄錯誤的變量。

在下面的計算函數的開頭放置這些代碼行。

function calculate() { 

    var front_inks = document.getElementById("ink_front"); 
    var ink_front = front_inks.options[front_inks.selectedIndex].value; 

    var back_inks = document.getElementById("ink_back"); 
    var ink_back = back_inks.options[back_inks.selectedIndex].value; 

    front_inks = parseInt(ink_front); 
    back_inks = parseInt(ink_back); 
    var run_rate = runRate(front_inks, back_inks); 
    document.getElementById("result").value = run_rate; 

    } 
+0

有人可以格式化我的代碼塊... –

+1

羅傑,雷迪!格式化。 – zatziky

+0

非常感謝你Zatziky ...你仍然錯過了第一行的功能...你可以請照顧那 –

0

這裏是您的代碼段的修正plunker:https://plnkr.co/edit/DfK5mNlXG3CaD8ke300a?p=preview

這是你的新calculate()

function calculate() { 
    var front_inks = document.getElementById("ink_front"); 
    var ink_front = front_inks.options[front_inks.selectedIndex].value; 
    var back_inks = document.getElementById("ink_back"); 
    var ink_back = back_inks.options[back_inks.selectedIndex].value; 

    front_inks = parseInt(front_inks); 
    back_inks = parseInt(back_inks); 

    var run_rate = runRate(ink_front, ink_back); 

    document.getElementById("result").value = run_rate; 
    } 

有你原來的代碼兩個主要區別:

  1. runRate()ink_front/在calculate()
  2. ink_front/ink_back 210,而不是front_inks/back_inks因爲你期待的數值都在這裏解決,使他們能夠有你的選擇選擇值。
0

您在錯誤的兩個值上調用parseInt()。您也一直在頁面加載時分配您的值,所以我將變量初始化和分配移動到calculate()。它現在按預期工作。

<html> 
 

 
<head> 
 
</head> 
 

 
<body> 
 
    <form> 
 
    <div> 
 
     <select id="ink_front"> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
     <option value="4">4</option> 
 
     </select> 
 
     <select id="ink_back"> 
 
     <option value="0">0</option> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
     <option value="4">4</option> 
 
     </select> 
 
    </div> 
 

 

 
    result 
 
    <INPUT type="text" id="result" readonly style="color:red;" /> 
 

 
    <button onclick="calculate()">submit</button> 
 
    </form> 
 
</body> 
 

 
<script type="text/javascript"> 
 
    function runRate(front_ink, back_ink) { 
 
    if (front_ink == 1 && back_ink == 0) { 
 
     var runRate = 6400; 
 

 
    } else if (front_ink == 2 && back_ink == 0) { 
 
     var runRate = 3200; 
 

 
    } else if (front_ink == 3 && back_ink == 0) { 
 
     var runRate = 2135; 
 

 
    } else if (front_ink == 4 && back_ink == 0) { 
 
     var runRate = 1600; 
 

 
    } else if (front_ink == 1 && back_ink == 1) { 
 
     var runRate = 3200; 
 
    } else if (front_ink == 2 && back_ink == 1) { 
 
     var runRate = 2135; 
 
    } else if (front_ink == 3 && back_ink == 1) { 
 
     var runRate = 1600; 
 
    } else if (front_ink == 4 && back_ink == 1) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 1 && back_ink == 2) { 
 
     var runRate = 2135; 
 
    } else if (front_ink == 2 && back_ink == 2) { 
 
     var runRate = 1600; 
 
    } else if (front_ink == 3 && back_ink == 2) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 4 && back_ink == 2) { 
 
     var runRate = 1070; 
 
    } else if (front_ink == 1 && back_ink == 3) { 
 
     var runRate = 1600; 
 
    } else if (front_ink == 2 && back_ink == 3) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 3 && back_ink == 3) { 
 
     var runRate = 1070; 
 
    } else if (front_ink == 4 && back_ink == 3) { 
 
     var runRate = 915; 
 
    } else if (front_ink == 1 && back_ink == 4) { 
 
     var runRate = 1280; 
 
    } else if (front_ink == 2 && back_ink == 4) { 
 
     var runRate = 1070; 
 
    } else if (front_ink == 3 && back_ink == 4) { 
 
     var runRate = 915; 
 
    } else if (front_ink == 4 && back_ink == 4) { 
 
     var runRate = 800; 
 
    } else { 
 
     var runRate = "wrong"; 
 
    } 
 

 
    return runRate; 
 
    } 
 

 

 

 
    function calculate() { 
 

 
    var front_inks = document.getElementById("ink_front"); 
 
    var ink_front = front_inks.options[front_inks.selectedIndex].value; 
 

 
    var back_inks = document.getElementById("ink_back"); 
 
    var ink_back = back_inks.options[back_inks.selectedIndex].value; 
 

 
    front_inks = parseInt(ink_front); 
 
    back_inks = parseInt(ink_back); 
 
    
 
    var run_rate = runRate(front_inks, back_inks); 
 

 
    document.getElementById("result").value = run_rate; 
 
    } 
 
</script> 
 

 
</html>