Javascript IF ELSE语句停止

时间:2013-11-23 17:12:30

标签: javascript if-statement

所以我们这里有我的GPA计算器代码。我已经把所有内容排成一行,但我似乎无法弄清楚为什么我的IF ELSE声明停止并将所有字母等级转换为值“4”。

我已经尝试将语句放在处理等级的for循环之外并将它们推送到gVals []我已经尝试将它们完全放在函数之外的函数中。我已经尝试了很多不同的东西,除了显然有效的东西。

我知道有很简单的方法可以做到这一点,但我试图以极简主义的心态执行这个应用程序。

代码:

    function calcGPA() {
    //Variable Sections
    var grades = document.querySelectorAll("#letGrade input[type=text]");
    var contacts = document.querySelectorAll("#conHours input[type=text]");
    var gVals = [];
    var cVals = [];
    var failGrade = "The Letter Grade input may only be capitol letters A,B,C,D or F";
    var failHours = "The Contact Hours input may only be 1, 2, 3, 4 or 5";
    var checkGrade = /^[ABCDF]/;
    var checkhours = /^[12345]/;
    //Grab the Letter grades and process them
    //Should validate all inputs in the letGrade div to capitol A, B, C, D or F
    //Should Convert all inputs in the LetGrade div to A = 4,B = 3,C = 2,D = 1,F = 0
    //Should push resulting conversion to gVals[]
    for (var i = 0; i < grades.length; i++) {
        if (!checkGrade.test(grades[i].value)) {
            alert(failGrade);
            return false;
        }
             if (grades[i].value == "A"){
                gVals.push("4");
            }
            else if (grades[i].value == "B"){
                gVals.push("3");
            }
            else if (grades[i].value == "C"){
                gVals.push("2");
            }
            else if (grades[i].value == "D"){
                gVals.push("1");
            }
            else if (grades[i].value == "F"){
                gVals.push("0");
            }
        //Should validate all inputs in the conHours div to 1, 2, 3, 4 or 5
        //Should push all resulting values to cVals[]
        if (!checkhours.test(contacts[i].value)) {
            alert(failHours);
            return false;
        }
        cVals.push(contacts[i].value);
    }
    console.log(gVals, cVals);
    document.getElementById("cumGPA").innerHTML = (gVals[0] * cVals[0]);
};

我遇到的问题是,从字母等级转换为质量点值的IF ELSE语句将所有内容返回到4而不是将其与其生成的字母等级组件匹配。

感谢您对此提出的任何帮助,如果您不能直接回答这个问题,请解释我哪里出错,以便我可以从中学习。

编辑:添加HTML以获得繁荣!和“固定”JAVASCRIPT!

<div id="calcWrapper">
    <form id="calc" name="calc" onsubmit="calcGPA(); return false;">
        <div id="letGrade">
            <input tabindex="1" type="text" maxlength="1" placeholder="Letter Grade..." />
            <input tabindex="3" type="text" maxlength="1" placeholder="Letter Grade..." />
            <input tabindex="5" type="text" maxlength="1" placeholder="Letter Grade..." />
            <input tabindex="7" type="text" maxlength="1" placeholder="Letter Grade..." />
            <input tabindex="9" type="text" maxlength="1" placeholder="Letter Grade..." />
            <input tabindex="11" type="text" maxlength="1" placeholder="Letter Grade..." />
            <label>Cumulative GPA:</label><output id="cumGPA" type="text" />
        </div>
        <div id="conHours">
            <input tabindex="2" type="text" maxlength="1" placeholder="Contact Hours..." />
            <input tabindex="4" type="text" maxlength="1" placeholder="Contact Hours..." />
            <input tabindex="6" type="text" maxlength="1" placeholder="Contact Hours..." />
            <input tabindex="8" type="text" maxlength="1" placeholder="Contact Hours..." />
            <input tabindex="10" type="text" maxlength="1" placeholder="Contact Hours..." />
            <input tabindex="12" type="text" maxlength="1" placeholder="Contact Hours..." />
            <input type="submit" value="Calculate" />
        </div>
    </form>
</div>

3 个答案:

答案 0 :(得分:2)

您希望将单个=更改为==进行比较

if (grades[i] == 'A'){

您的代码中包含以下内容:

    if (grades[i] == 'A'){
            gVals.push("4");
        }
        else if (grades[i] == 'B'){
            gVals.push("3");
        }
        else if (grades[i] == 'C'){
            gVals.push("2");
        }
        else if (grades[i] == 'D'){
            gVals.push("1");
        }
        else if (grades[i] == 'F'){
            gVals.push("0");
        }

注意: -

Double equality ==用于比较,single =用于在Javascript中进行分配。

同样 Andy 指出,在评论中你的for循环都使用相同的index i,这可能会给你带来麻烦(至少不是一个好习惯) 。如果为循环创建一个新的变量for,那会更好。目前还不清楚你想用for循环实现什么,但我认为它也可以用单for循环完成。

答案 1 :(得分:2)

它无法正常工作的原因是因为在if语句中,您使用的是单个等号。单个等于将grades[i]设置为等于'A' - 它实际上并未评估grades[i] == 'A'

答案 2 :(得分:1)

正如在其他答案中指出的那样,您应该使用比较运算符==而不是在=条件中分配运算符if,并且不要忘记grades[i]是DOM对象而不是一些普通值 - 因此您必须与此对象的某些属性进行比较(如果要与输入的文本进行比较,请使用value属性)

      if (grades[i].value == "A"){
            gVals.push("4");
        }
        else if (grades[i].value == "B"){
            gVals.push("3");
        }