【问题标题】:How to return a variable with jQuery each function如何使用jQuery每个函数返回一个变量
【发布时间】:2013-06-02 15:36:22
【问题描述】:

这是我的脚本(简化版):

var $error = false;
//Check for errors
$('.required').each(function()
{
    var $error = true;
});
alert($error);

如何让上述代码在alert函数中返回true? 每个函数在我的页面上执行 3 次以检查空字段。 但在上面的警报中包含 false 而不是 true。 有没有办法在每个函数之外解析变量$error来检查每个循环之后是否有空字段?

【问题讨论】:

  • 如果您收到false 的警报,那么您没有与.required 选择器匹配的元素。尝试先解决这个问题:)
  • 感谢文章链接!

标签: jquery function variables return each


【解决方案1】:

.each() 回调函数中删除var,否则您将在不同的范围内定义一个新变量。

var $error = false;
//Check for errors
$('.required').each(function()  //<-- start of new scope block
{
    var $error = true;  //<--defines new variable -- different from one above
});
alert($error);

删除var,它现在将使用上面块中定义的变量

var $error = false;
//Check for errors
$('.required').each(function()  
{
    $error = true;  
});
alert($error);

【讨论】:

    【解决方案2】:

    您正在遮蔽$error 回调内部的外部$error 变量。去掉 var 以便引用外部的:

    var $error = false;
    $('.required').each(function() {
        $error = true; // Now this refers to the `$error` declared above
    });
    

    但是,如果您只是使用 .each 调用来检查是否有任何元素具有 .required 类,则只需检查 .length

    alert($('.required').length > 0); // true or false depending if elements matched
    

    【讨论】:

    • 欲了解更多信息:Variable shadowing in Javascript
    • 非常感谢!今天又学到了一些小但非常有用的东西!另外,您的第二种方式要容易得多。我会用它。我现在使用的是:$(this).val()==''。
    【解决方案3】:

    只需删除内部的var 关键字

    var $error = false;
    //Check for errors
    $('.required').each(function()
    {
         $error = true;  // No Var Here
    });
    alert($error);
    

    或使用window 作为您的命名空间,如下所示

    window.error = false;
    //Check for errors
    $('.required').each(function()
    {
         window.error = true;  // No Var Here
    });
    alert(window.error);
    

    请注意,如果您遇到return false 错误,最好打破循环——这只是一个性能建议!

    【讨论】:

      【解决方案4】:

      $erro 声明了 locallyglobally

      var $error = false;
      $('.required').each(function()
      {
          $error = true;
      });
      

      【讨论】:

        【解决方案5】:

        如果要检查文本是否为空,可以使用:

        var $error = false;
        $('input.anyclass').each(function()
        {
            if($(this).val() == "")
            {
                $error = true;
            }
        });
        alert($error);
        

        【讨论】:

          猜你喜欢
          • 2021-05-13
          • 2019-03-09
          • 2012-11-21
          • 2014-08-30
          • 1970-01-01
          • 1970-01-01
          • 2016-04-21
          • 2015-10-16
          • 2020-06-02
          相关资源
          最近更新 更多