2010-08-11 73 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