1

这是我的脚本(简化):

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

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

4

5 回答 5

3

您正在隐藏回调内部的外部$error变量。.each()摆脱,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
于 2013-06-06T14:52:18.977 回答
3

只需删除 innervar关键字

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- 只是一个性能建议!

于 2013-06-06T14:52:23.147 回答
3

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

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

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

var $error = false;
//Check for errors
$('.required').each(function()  
{
    $error = true;  
});
alert($error);
于 2013-06-06T14:52:36.013 回答
2

$erro声明locallyglobally

var $error = false;
$('.required').each(function()
{
    $error = true;
});
于 2013-06-06T14:52:27.003 回答
0

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

var $error = false;
$('input.anyclass').each(function()
{
    if($(this).val() == "")
    {
        $error = true;
    }
});
alert($error);
于 2013-06-06T14:57:49.987 回答