我无法让变量相乘。出于某些奇怪的原因,我的变量值是从输入字段中调用的,但是我什至尝试为它们提供如下的默认值,但这些默认值仍然无法使用。
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>
最佳答案
您的第一个代码段与第二个代码段不匹配。我只能假设第二个问题是“真实的”问题,第一个问题是匆忙地“解决”了这个问题,从而引入了一些错误。
您的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
(不使用基数)。最后,您在评论中提到“它只是不执行[您的]脚本”。您正在注册onBlur事件,这意味着您需要执行触发onblur的操作(例如,通过字段进行制表以使其离开)。也许您没有这样做。
关于javascript - JavaScript乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6098897/