2013-01-22 54 views
-1

請幫我理解爲什麼我的代碼沒有反應我對它的期望?Javascript if語句for for循環

所以我遍歷for循環中的值列表,然後如果它們匹配表單提交的值,它應該返回該值,如果它不匹配,它應該返回-1。如果我在if條件中省略'else'語句,它將起作用(如果沒有匹配的值,顯然不返回-1)。但是,如果輸入的是第一個值(在這種情況下爲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; 
     } 
    } 

}; 

非常感謝!

回答

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當我想你的意思是別的東西。

+0

謝謝!這就說得通了。我認爲它可能與for循環中的其他東西有關,但無論出於何種原因,都沒有嘗試過。我很感激它,並且所有人都在努力幫助! &是的,我很抱歉,我不是說JavaScript中的'return',但你知道.. – Devin

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; 
0

return false將結束循環,即使它沒有你將騎上一個-1警惕是不是每一個項目一個進入。

對於這種搜索,你應該檢查條件是否爲真,在這一點上你做了什麼和return,並且忽略了else。然後你在環路for後做你的「如果他們沒有匹配」代碼

0

發生這種情況是因爲當發現你應該打破循環,而不是下一次迭代,而當沒有找到循環不應該打破return false

但是,你的情況我會用一個標誌found和標誌勾選Loop後:

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);