for循环中的Javascript if语句

时间:2013-01-22 22:19:41

标签: javascript

请帮助我理解为什么我的代码没有对我的预期做出反应?

所以我在for循环中迭代值列表,然后如果它们与表单提交的值匹配,它应该返回该值,如果它不匹配,它应该返回-1 。如果我遗漏了其他的'在if条件中的语句,它工作(如果没有匹配的值,显然不返回-1)。但是使用else,它只会返回第一个值(如果已输入)(在这种情况下为10),否则它将始终返回-1。 (如果我输入20,它将返回-1,即使它在我的值列表中)

我在这里缺少什么/不理解?

// reference the form
var myForm = document.getElementById('findValue');

// our list of random values
var values = [10,20,30,40,50,60,70,80,90,100,234,255,345,366,900,1000,1002,1025,2034];

// on form submit
myForm.onsubmit = function(evt) {

var valueToFind = document.getElementById('myValue').value;

    // do not let it refresh the page/send a query
    evt.preventDefault();

    for(var i = 0; i < values.length; i++) {

        if(valueToFind == values[i]) {
            alert(values[i]);
        }
        else {
            alert(-1);
            return false;
        }
    }

};

非常感谢你!

4 个答案:

答案 0 :(得分:2)

你不会让它搜索到最后。第一次没有匹配,它会返回。

您应该在找到匹配后立即发出警报,并返回true以允许提交。如果不匹配,则在循环后返回false

myForm.onsubmit = function(evt) {
    var valueToFind = document.getElementById('myValue').value;

    // do not let it refresh the page/send a query
    evt.preventDefault();

    for(var i = 0; i < values.length; i++) {

        if(valueToFind == values[i]) {
            alert(values[i]);
            return true;
        }
    }
    alert(-1);
    return false;
};

编辑:当我认为您的意思是其他内容时,您的问题会使用作品return

答案 1 :(得分:0)

在查看第一项后,您总会以这种或那种方式返回。如果第一个不是mathc,你必须继续循环:

for(var i = 0; i < values.length; i++) 
{
    if(valueToFind == values[i]) 
    {
        alert(values[i]);
        return values[i];
    }
}
// only return false after the loop is complete with no match.
alert(-1);
return false;

答案 2 :(得分:0)

return false将结束循环,即使它没有,您也会为每个不是输入的项目添加-1警报。

对于这种类型的搜索,您应该检查条件是否为真,此时您使用return执行某些操作,并忽略else。然后,在 for循环之后,执行“如果没有匹配”代码

答案 3 :(得分:0)

这种情况发生的原因是,一旦发现你应该打破循环而不是下一次迭代,而当没有找到时,循环不应该与return false决裂。

但是,在你的情况下,我会在循环后使用标志found和标志检查:

var found = false;
for (var i = 0; i < values.length; i++) {
    if (valueToFind === values[i]) {
        found = true;
        break;
    }
}
alert(found ? valueToFind : -1);

另一个简短的方法是使用Array.indexOf方法:

alert(values.indexOf(valueToFind) > -1 ? valueToFind : -1);