将.each循环中的变量传递给函数中的if语句

时间:2013-01-25 15:46:23

标签: jquery var

我是Jquery / Javascript编程的新手,所以请保持温和;)

以下功能检查是否选择了来自特定组的单选按钮。但是我无法得到:

  

var checkifonechecked = true;

传递给if语句。它返回一个Uncaught ReferenceError:未定义checkifonechecked。我怎样才能传递这个var?

function stap3() {
$('input[name=ostap2]').each(function() {
    if (this.checked) {
        var checkifonechecked = true;
    }
});
if(checkifonechecked){  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen'); }
} 

对于任何帮助都有很多,

5 个答案:

答案 0 :(得分:4)

您只需要检查实际检查的数量。实际上不需要每个语句或变量

function stap3() {
   if($('input[name=ostap2]:checked').length){  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen'); 
    }
} 

答案 1 :(得分:3)

您的问题是因为您在匿名函数(AKA lambda)中声明了checkifonechecked变量。一旦匿名函数结束,该变量就不再存在,因此在stap3函数中尝试使用它将失败并显示“Uncaught ReferenceError”。

您需要在保证执行的地方声明您的变量(例如stap3函数的开头),如下所示:

function stap3() {
    // DECLARE your variable outside the anonymous function.
    var checkifonechecked = false;

    $('input[name=ostap2]').each(function()  // This is the anonymous function.
    {
        if (this.checked) {
            // ASSIGN a value to your variable.
            checkifonechecked = true;
        }
    });

    if(checkifonechecked)
    {  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } 
    else
    {
        alert('neen'); 
    }
} 

答案 2 :(得分:1)

您正在检查在不同范围内声明的变量。您需要在更高的范围内声明变量:

function stap3() {
    var checkifonechecked = false;
    $('input[name=ostap2]').each(function () {
        if (this.checked) checkifonechecked = true;
    });

    if (checkifonechecked) {
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen');
    }
}

答案 3 :(得分:1)

问题是checkifonechecked的范围,您需要将其移动到stap3函数

function stap3() {
    var checkifonechecked = false;
    $('input[name=ostap2]').each(function () {
        if (this.checked) {
            checkifonechecked = true;
        }
    });

    if (checkifonechecked) {
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen');
    }
}

答案 4 :(得分:0)

你可以发布HTML部分(包含表单的部分),如果你将变量定义为全局,那么,不要重复(var checkifonechecked = true)只使用(checkifonechecked = true)。

现在,为了节省资源,请在找到所选复选框后中断循环,因为只有其中一个复选框可以检查,如果找到了一个复选框,则无需查看其他复选框。