获取未定义的返回值,尽管在功能中它不是

时间:2017-09-17 15:02:15

标签: javascript

function getCheckedRadioButton() {
    getRadioButtons().forEach(function (t) {
        if (t.checked) {
            console.log(t);
            return t;
        }
    });
}

上面的函数被调用:

var x = getCheckedRadioButton();
console.log(x);
if (x.className)
{
    //do something
}

控制台输出:

input type="radio" id="pvp" name="gameMode" value="0" class="hasTextboxes"
undefined
Uncaught TypeError: Cannot read property 'className' of undefined

我甚至尝试过:

if (getCheckedRadioButton().className)

但它不起作用。

3 个答案:

答案 0 :(得分:2)

这一行:

return t;

从此功能返回:

function (t) {
  //...
}

这一个:

getCheckedRadioButton() {
  //...
}

你到底想要回来的是什么?只是数组中的第一个匹配结果?您可以使用普通循环而不是使用嵌套函数的循环:

var radios = getRadioButtons();
for (var i = 0; i < radios.length; i++) {
    if (radios[i].checked) {
        console.log(radios[i]);
        return radios[i];
    }
}
// return some default if nothing is found?

答案 1 :(得分:1)

您从forEach的回调(匿名函数)返回,而不是从函数getCheckedRadioButton返回。函数getCheckedRadioButton不返回任何内容,因此其返回值为undefined

如果要重新加入第一个选中的单选按钮,请使用findfind将返回其回调调用返回的数组中的第一项truet.checked设置为true的项目)或null如果没有项目匹配。然后,我们应该将该项目/ null返回给getCheckedRadioButton

的来电者
function getCheckedRadioButton() {
    return getRadioButtons().find(function (t) {
        return t.checked;
    });
}

答案 2 :(得分:1)

您的回访是指pkts = sniff(count=10) for pkt in pkts: if ICMP in pkt: print 'match!' 的回调。您永远不会返回外部函数,因此.forEach未定义。虽然x接受回调,但它是同步的,所以您可以像这样修复它:

.forEach

注意,你应该处理不匹配的可能性(我在这里设置为返回false。空对象function getCheckedRadioButton() { var returnElement = false; getRadioButtons().forEach(function (t) { if (t.checked) { console.log(t); returnElement = t; } }); return returnElement; } 也可以用于你的目的)。