保持添加值而不覆盖该功能

时间:2013-06-15 08:31:21

标签: javascript html

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函数在某处错了

2 个答案:

答案 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
}