function checkData() {
var temp = 0;
var totalMarks = countMark(temp);
if (totalMarks != 100)
window.alert("Marks must total 100");
}
function countMark(mark) {
var totalMark = 0;
totalMark += parseInt(mark)
return totalMark;
}
function doAdd() {
var taskid = document.getElementById("taskid").value;
var taskname = document.getElementById("taskname").value;
var taskmark = document.getElementById("taskmark").value;
if (taskid.length === 0)
window.alert("Task Id cannot be empty!");
if (taskname.length === 0)
window.alert("Task name cannot be empty!");
if (taskmark.length === 0)
window.alert("Task Mark cannot be empty!");
else if (!markpattern.test(taskmark))
window.alert("Invalid data in mark field");
var marks = parseInt(document.getElementById("taskmark"));
if (marks < 0 || marks > 100)
window.alert("Marks out of range. Please re-enter");
countMark(marks);
}
我的问题是当我继续调用doAdd()函数时。我的分数会继续增加。想像C ++中那样传递引用。我的函数countMark(...)将继续添加。
之后,当我的表单提交时,我的表单将调用函数checkData() 如果我的总标记不是100。将提示警告和错误。
但我的代码无效。我想我的countMark函数在某处错了
答案 0 :(得分:0)
如果我理解正确,那么你正在寻找一个静态变量的等价物 - 这是在第一次调用函数时初始化的东西,并保留了后续调用的值。
看看这个相关的问题:https://stackoverflow.com/a/1535650/2444111
最佳答案(通过CMS)讨论的是基于类的静态变量,这些变量并不完全相同。
第二个答案(Pascal MARTIN)是你正在寻找的。它利用了JS函数也是对象的事实,并将变量存储为函数对象的属性。这是一个比使用全局变量(或窗口属性,实际上是全局变量)更好的解决方案
答案 1 :(得分:0)
您的代码中存在多个问题,而且很难说出您的意图。但我会解决我发现的问题。
在下面的代码中,您正在请求DOM元素并尝试将其解析为整数。该类型转换的结果始终为NaN
。也许想要像以前一样获得元素的value
属性。 (另外,不要多次请求相同的元素。请求一次,将结果保存在变量中并使用该变量)。
var marks = parseInt(document.getElementById("taskmark"));
if (marks < 0 || marks > 100)
window.alert("Marks out of range. Please re-enter");
countMark(marks);
你的函数countMark
非常无用,因为它总会返回你传递给它的任何数字(请参阅代码中的注释)。
function countMark(mark) {
var totalMark = 0; //create a new variable with value 0
totalMark += parseInt(mark) //add "mark" to that variable
return totalMark; //return that variable => 0 + mark = mark (and if mark = NaN => 0 + mark = NaN)
}
也许你想让totalMark成为一个全局变量,而不是你需要在你的函数之外定义它:
var totalMark = 0;
function countMark(mark) {
totalMark += parseInt(mark);
return totalMark;
}
最后但并非最不重要的是,让我们分析你的函数checkData:
function checkData() {
var temp = 0; //create a local variable with value 0
var totalMarks = countMark(temp); //pass 0 to countMark => return 0 => totalMarks = 0
if (totalMarks != 100) //always true since totalMarks is always 0
window.alert("Marks must total 100"); //will always alert
}