1

chrome控制台的输出

z = selected_sheet()

返回

5 
undefined

...

z

返回

undefined

JavaScript 代码

function selected_sheet(){
        $('.sheet_radio').each( function(){
            if (this.checked == true){
                var x = 5;
                console.log(x);
                return x;
            };
        });
    };

所以我从控制台日志中得到了正确的输出,但 z 没有设置为从 console.log 返回的相同项目。

4

2 回答 2

1

问题

发生这种情况是因为.each执行的函数仅从该函数的范围返回。它不会从selected_sheet返回。

事实上,如果你明确地让传递给每个明确地返回一个值的函数,你会注意到 z 实际上从未设置:

 function selected_sheet() {

    $('.sheet_radio').each(function() {
        return 5;
    });
    // nothing is actually being returned

 };

 z = selected_sheet(); // z is undefined

解决方案

一种解决方案是在外部范围内为 x 设置默认值(或不定义),然后在选中单选按钮时将 x 的值设置为新值

function selected_sheet() {

    var x = 7; // set default to 7


    $('.sheet_radio').each(function() {

        if (this.checked == true) {
            x = 5; // set to new value
            console.log(x);
            return false; // stop iterating
        }

    });

    return x;
};

另一种方法是使用选择器查询是否有选中的单选按钮:

function selected_sheet() {
    if($('.sheet_radio:checked').length > 0) {
       return 5;
    } else {
        return 7; // this is the default if nothing is checked
    }
}

最后,这是一个纯 JavaScript 解决方案:

function selected_sheet() {
    if( document.querySelector('.sheet_radio:checked') !== null) {
      return 5;
     } else {
       return 7; // this is the default if nothing is checked
   }
}

和一个简洁的版本

function selected_sheet() {
   return document.querySelector('.sheet_radio:checked') !== null? 5 : 7;
}
于 2013-07-17T05:46:06.150 回答
1

这是因为一次只能选择一个单选按钮。我将在一分钟内对此进行扩展。

所以这是你的代码:

function selected_sheet(){
        $('.sheet_radio').each( function(){
            if (this.checked == true){ `Entry Point`
                var x = 5;
                console.log(x);
                return x;
            };
        });
    };

如果选择了单选按钮,则控件进入 if 条件Entry Point,因此输出为 5,

但是,如果未选择单选按钮,则控件不会通过,Entry Point因为 if 条件失败并且函数返回未定义。

如果您有任何问题,请告诉我。

于 2013-07-17T04:24:06.800 回答