2017-09-17 23 views
1

これは私の最初の質問stackoverflowです。それが悪い質問であればごめんなさい。関数ではありませんが、未定義の戻り値を取得

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 

私も試してみました:しかし...

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

機能は、上記に呼び出さ

if (getCheckedRadioButton().className) 

しかし、それはdoesnの仕事。

誰かが私を助けることを願っています。

-Kenan

+0

関数getRadioButtonsはどのように見えますか? –

+1

'return t;'は*コールバック*関数の内部にあります。外側の関数からは戻りません。 – Pointy

答えて

2

このライン:

return t; 

は、この関数から戻っている:

function (t) { 
    //... 
} 

ないこの1:

getCheckedRadioButton() { 
    //... 
} 

あなたは正確に何を返そうとしていますか?配列内の最初のマッチング結果?あなただけのネストされた関数で、通常のループの代わりのいずれかを使用することができますあなたが機能getCheckedRadioButtonからではないforEachのコールバック(匿名関数)から戻ってきている

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

または 'Array.prototype.find'を使用してください。 – Xufox

1

。関数getCheckedRadioButtonは何も返さないので、戻り値はundefinedです。

最初にチェックされたラジオボタンを再生する場合は、findを使用します。 findは、コールバック呼び出しがtruet.checkedtrueに設定した項目)または一致する項目がない場合はnullを返した配列から最初の項目を返します。あなたのリターンコールは.forEachのコールバックを参照している

function getCheckedRadioButton() { 
    return getRadioButtons().find(function (t) { 
     return t.checked; 
    }); 
} 
1

:その後、我々はgetCheckedRadioButtonの呼び出し元にその項目/ nullを返す必要があります。あなたは外部関数を返さないので、xは未定義です。 。

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

注意、あなたは私がfalseを返すようにここで設定マッチしない(空のオブジェクト{}月の可能性を処理する必要があります:.forEachがコールバックを受け入れますが、それはあなたがこのようにそれを修正することができるように、同期していますあなたの目的にも役立ちます)。

+0

これは最初にチェックされていない最後にチェックされたラジオボタンを返します。 –

+0

@ibrahimmahrirあなたは正しいですが、それは私の質問と一線を画していないようです。最初に望むなら修正するのは難しくない( 'if(!returnElement)'か何かを追加する) – arbuthnott

関連する問題