2011-08-05 7 views
3

を返されます機能外console.logに呼び出し、それを呼び出した後:返す変数がこのことを何らかの理由がある一度未定義

function find_parent_p(x){ 
    daddy = jQuery(x).parent(); 


    if(daddy.attr("tagName").toLowerCase() == 'p'){ 

     return (daddy); 
    } else { 
     find_parent_p(daddy); 

    } 

} 
jQuery(document).ready(function($){ 

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

      next = find_parent_p($(this)); 
        console.log(next,"result"); 

     }) 


}); 
+1

あなたは実際に何をしようとしていますか? tagNameという名前の属性がpの値を持つ親を見つけるだけですか? –

+0

parent()、parents()、またはclosest()を使用できるとき、find_parent_pの目的は何ですか? – jerjer

+0

なぜあなたは$とjQueryを混ぜていますか?一つを選ぶ! – epascarello

答えて

6

あなたelse状態でreturn文を逃しています。あなたの関数が再帰した場合、トップレベルの呼び出しは何も返しません。そして、あなたはundefinedになります。

else { 
    return find_parent_p(daddy); 

} 
3

この問題が原因であるかどうかはわかりませんが、機能がすぐに要素を検出した場合にのみ機能します。

  • 再帰呼び出し

からdaddyローカル変数(グローバル変数との競合の可能性を防ぐため)

  • 戻り、結果を作成します。

    function find_parent_p(x) { 
        var daddy = jQuery(x).parent(); 
        if(daddy.attr("tagName").toLowerCase() == 'p') { 
        return daddy; 
        } else { 
        return find_parent_p(daddy); 
        } 
    } 
    

    注:あなたが行うことができますjQueryだけを使用して同じ:

    var next = $(this).closest('p'); 
    
  • +0

    +1の 'closest()' – epascarello

    +0

    近くを指摘してくれてありがとう。私はあなたにダニを与えるだろうが、厳密には実際の質問に対する最良の答えではないので、あなたは+1をしなければならない –

    0

    pのimgの親を得ることを目指すなら、あなたは使うことができます。

    $('img').each(function(){ 
        next = $(this).closest('p'); 
        console.log(next,"result"); 
    }) 
    
    関連する問題