2011-05-23 26 views
2

我無法讓我的變量乘以。出於某種奇怪的原因,我的變量值是從輸入字段中調用的,但我甚至試圖給它們默認值,如下所示,它仍然不起作用。JavaScript乘法

var conMin = document.getElementById('cMin').value; 
var serLev = document.getElementById('sLev').value; 
var noFrames = 1800; 
var noFramesTot = noFrames*24; 
var coresTest = document.getElementById('coresintest').value; 
var estCoreHours = 200; 
var art = 20; 
var coreHrs = noFrames * coresTest * art; 

alert(coreHrs); 

我的警報無法正常工作,但是如果我把乘法這個作品,然後刪除art變量。我已經嘗試將parseInt()添加到每個變量只有現在它返回NaN。如果我從等式中刪除art它工作正常。我coresTest是在輸入定義:

var coresTest = document.getElementById('coresintest').value; 

我得到的錯誤是,我的功能正在工作,而不是輸出任何東西。我的整個頁面的源代碼是。

<html> 
<head> 
<script> 

function functionCalc() { 

    // Variables 
    var conMin = document.getElementById('cMin').value; 
    var serLev = document.getElementById('sLev').value; 
    var noFrames = 1800; 
    var noFramesTot = noFrames*24; 
    var coresTest = document.getElementById('coresintest').value; 
    var estCoreHours = 200; 
    var art = document.getElementById('art'); 
    var coreHrs = parseInt(noFrames) * parseInt(coresTest) * parseInt(art); 

    // Hours Minutes Seconds variables 
    var avgframerndrtme = document.getElementById('avgrndrtime').value; 
    var secfunc = avgframerndrtme/3600; 
    var secmin = avgframerndrtme/60; 
    var hourfunc = avgframerndrtme/1; 
    var conMin = document.getElementById('cMin').value; 
    var art_value = art.options[art.selectedIndex].value; 
    var switchart = document.getElementById('switchart').value; 

    // Workout if Average render time is in minutes seconds etc... 
    switch(art_value) 
    { 
     case "minutes": 
      document.getElementById("switchart").value=secmin.toFixed(3); 
      break; 
     case "seconds": 
      document.getElementById("switchart").value=secfunc.toFixed(3); 
      break; 
     case "hours": 
      document.getElementById("switchart").value=hourfunc; 
      break; 
    } 

    var total = coreHrs * serLev; 

    document.getElementById("estDiv").innerHTML=total; 
    document.getElementById("corehours").innerHTML=coreHrs; 
} 
</script> 
</head> 
<body> 
    <h1>Content/SLA</h1> 
    corehours: 
    <input type='text' id='cHours' onKeyUp="functionCalc()" /><br /> 
    content minutes: 
    <input type='text' id='cMin' onKeyUp="functionCalc()" /><br /> 

    Service level: 
    <select onBlur="functionCalc()" onClick="functionCalc()" id="sLev"> 
     <option value="0.84" id="mega">Priority Mega</option> 
     <option value="0.67" id="urgent">Priority Urgent</option> 
     <option value="0.56" id="standard">Standard Job</option> 
     <option value="0.28" id="scheduled">Scheduled Job</option> 
     <option value="0.14" id="lightpass">Light Pass Job</option> 
    </select><br /> 

    number of frames (Optional): 
    <input type='text' id='noFrames' value="1800" /><br /> 
    --------------------------------------------------------------------------------- 
    <br /> 

    <h1>render time</h1> 

    <!-- avg frame render hours: 
     <input type='text' id='renHours' onKeyUp="functionCalc()" /><br /> --> 
    average render time: 
    <input type='text' id='avgrndrtime' onKeyUp="functionCalc()" onBlur="functionCalc()" /> 

    <select onChange="functionCalc()" onBlur="functionCalc()" id="art"> 
     <option value="hours" id="hours">Hours</option> 
     <option value="minutes" id="mins">Minutes</option> 
     <option value="seconds" id="secs">Seconds</option> 
    </select><br /> 
    cores in test :<input type='text' id='coresintest' onKeyUp="functionCalc()" /> 
    <br /><br /> 
    ---------------------------------------------------------------------------------<br /> 

    <h1>Estimate </h1> 

    estimated Total : <div id="estDiv"></div><br> 
    estimated core hours : <div id="corehours"></div> 

    <br><br><br><br><br><br><br><br><br><br><br><br>AVERAGE FRAME RENDER TIME 
    <input type='text' id='switchart' onKeyUp="functionCalc()" /> 
    <br /> 
</body> 
</html> 
+0

你會得到什麼?如果是'NaN',則首先嚐試解析'coresTest'。 – pimvdb 2011-05-23 14:54:08

+0

你有什麼錯誤?它溢出了嗎? – carlosfigueira 2011-05-23 14:54:21

回答

0

嘗試

parseInt(var); 

看起來像它無法檢測到的數據類型!

+0

var coreHrs = parseInt(noFrames)* parseInt(coresTest)* art; – Sourav 2011-05-23 14:54:52

+0

它只是不執行我的腳本,我試試parseInt,謝謝 – lg87 2011-05-23 14:55:36

+1

你應該編輯答案不加評論。 – 2011-05-23 14:56:22

3

您的第一個代碼段和第二個代碼段不匹配。我只能假設第二個應該是「真正的」,第一個是爲了這個問題而匆匆「固定」的,因此引入了一些錯誤。您的art字段不包含數字值。這是(部分)你的問題在哪裏。如果你對它進行了硬編碼,那就沒問題了,但是在你的標記中,它是一個組合框,其中包含「小時」,「分鐘」和「秒」的字符串值,而不是數值(參見下面的完整代碼以瞭解如何提供數字值,而選項使用文本標籤)。

此外,你寫的:

var art = document.getElementById('art'); 

它應該是:

var art = document.getElementById('art').value; 

這裏的東西,將工作,但生產的東西完全無意義的:

<html> 
    <head> 
    <script> 
     function functionCalc() { 

     // Variables 
     var noFrames = document.getElementById('noFrames').value; 
     var coresTest = document.getElementById('coresintest').value; 
     var art  = document.getElementById('art').value; 
     var coreHrs = parseInt(noFrames, 10) * parseInt(coresTest, 10) * parseInt(art, 10); 

     document.getElementById("cHours").value = coreHrs; 
     } 
    </script> 
    </head> 

    <body> 
    corehours: <input type='text' id='cHours' /><br /> 
    number of frames (Optional): <input type='text' id='noFrames' value="1800" /><br /> 
    <select id="art"> 
     <option value="5" id="hours">Hours</option> 
     <option value="10" id="mins">Minutes</option> 
     <option value="100" id="secs">Seconds</option> 
    </select> 
    <br /> 
    cores in test :<input type='text' id='coresintest' /> 
    <br />  
    <button id='coresintest' onclick="functionCalc()">calc</button> 
    </body> 
</html> 

我再說一遍,這是不合情理的,因爲我不知道你在努力達到什麼目的。

另外,要小心你的變量和字段名稱和ID。你有一個cHours和一個corehours,所以這對每個領域的意圖都有點混亂。儘量不要混淆XML和HTMl語法(代碼中有關閉和非關閉<br />標籤),儘管它與您的問題無關,但這不是一個好習慣。挑一個並堅持下去。

千萬要注意parseInt功能以及(假設你想整數值),而且它需要一個基數(第二個參數)的事實。你需要浮點值,使用相當於parseFloat(不使用基數)。

最後,你在評論中提到「它只是不執行[你的]腳本」。你正在註冊關於事件的事件,這意味着你需要做一個觸發onb​​lur的動作(比如通過字段來留下它們)。也許你沒有這樣做。

+0

@ lg87:感謝更新的細節。我重寫了我的答案,詳細解釋了你的問題。 – haylem 2011-05-23 15:27:26

+1

有時你不只是想「+1正確」答案,而是「+5感謝你的努力」。這是其中的一次。像你這樣的人讓Stackoverflow搖滾:) – Konerak 2011-05-24 06:24:54

+0

@Konerak:謝謝:)我覺得像我這樣的人有時在辦公室非常無聊,很不幸。另外,對我來說,看這些都是很好的訓練。 – haylem 2011-05-24 10:55:56