2010-08-11 22 views
1

我是jQuery的新品(真的是一般的javascript),並且正在嘗試編寫一個通用函數來檢查頁面上的所有文本和選擇框以進行輸入,如果返回true或true頁面上的多個框至少包含一個字符,如果沒有,則使用「false」(如果沒有輸入,則使用禁用搜索按鈕)。我寫了下面的功能:jQuery - 在循環中返回控制

function hasUserProvidedInput() { 
     $('input[type="text"]').each(function() { 

      if ($(this).val() != '') { 
       alert("he has"); 
       return true; 
      } 
     }); 
     $('select').each(function() { 
      if ($(this).val() != '') { 
       return true; 
      } 


     }); 

     return false; 
    } 

這樣做的目的是,它會通過所有文本框迭代,並在頁面上選擇框,第二它擊中一個與輸入將控制權返回給調用函數與'true'的值(我把這個函數的keyup事件連接到頁面上的文本框和選擇框中)。如果它遍歷頁面上的所有這些控件,並且沒有找到具有輸入的控件,則它將返回false。

我爲了調試目的添加了警報。該警報正常工作以指示文本框何時包含輸入,但是我的函數始終返回值爲'false'。任何人都可以爲我解釋爲什麼會發生這種情況/我該如何修復它?謝謝。

回答

1

如果您正在檢查輸入的val(),那麼您處於匿名函數的範圍內。當您從這兩個匿名函數中的一個返回值時,將從該函數返回,而不是您的整個hasUserProvidedInput函數。所以,基本上,你在匿名函數中的「返回true」語句將被丟棄。

嘗試是這樣的:

function hasUserProvidedInput() { 
     var returnValue = false; 
     $('input[type="text"],select').each(function() { 
      if ($(this).val() != '') { 
       returnValue = true; 
      } 
     }); 

     alert(returnValue); 
     return returnValue; 
} 

我把這個代碼在撥弄所以你可以用它玩:http://jsfiddle.net/tddmp/

+0

明白了!感謝您的解釋 – Andrew 2010-08-11 15:00:42