1

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

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

var checkifonechecked = true;

传递给 if 语句。它返回一个 Uncaught ReferenceError: checkifonechecked is not defined。我怎样才能通过这个变量?

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

非常感谢任何帮助,

4

5 回答 5

4

您只需要检查实际检查了多少。真的不需要每个语句或变量

function stap3() {
   if($('input[name=ostap2]:checked').length){  
        $('#stap1, #stap2, #stap4, #stap5, #stap6, #stap7').hide();
        $('#stap3').show();
    } else {
        alert('neen'); 
    }
} 
于 2013-01-25T15:51:26.597 回答
3

您的问题是因为您checkifonechecked在匿名函数(又名 lambda)中声明变量。匿名函数结束后,变量不再存在,因此尝试在stap3函数中使用它将失败,并出现您所描述的“未捕获的 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'); 
    }
} 
于 2013-01-25T15:50:20.407 回答
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');
    }
}
于 2013-01-25T15:50:32.440 回答
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');
    }
}
于 2013-01-25T15:52:22.577 回答
0

您能否发布 HTML 部分(包含表单的部分),另外,如果您将变量定义为全局变量,则不要重复 (var checkifonechecked = true) 只需使用 (checkifonechecked = true)。

现在,为了节省资源,一旦找到选定的复选框,就中断循环,因为只有其中一个可以被选中,如果找到选中的复选框,您不需要查看其他复选框。

于 2013-01-25T15:54:31.810 回答