0

请帮助我理解为什么我的代码没有像我期望的那样做出反应?

所以我在 for 循环中遍历值列表,然后如果它们匹配表单提交的值,它应该返回该值,如果它不匹配,它应该返回 -1。如果我在 if 条件中省略了 'else' 语句,它会起作用(如果没有匹配的值,显然不会返回 -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

4 回答 4

3

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

您应该在找到匹配项后立即发出警报,然后返回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当我认为你的意思是别的东西时,你的问题使用了这项工作。

于 2013-01-22T22:23:39.387 回答
0

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

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;
于 2013-01-22T22:23:22.003 回答
0

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

对于这种搜索,您应该检查条件是否为真,此时您使用它和 做一些事情return,并省略else. 然后在循环之后执行“如果它们都不匹配”代码。for

于 2013-01-22T22:23:29.840 回答
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);
于 2013-01-22T22:25:06.557 回答