2012-03-07 6 views
1

私はオブジェクトを返す関数を持っています。オブジェクトには、ポップアップを表示して閉じる2つの関数があります。親関数内で動作しますが、外からではありません。それを呼び出す正しい方法ではありません。elseどうすれば外側からobj関数を呼び出すことができますか?私のobj関数を呼び出すのは正しい方法ではありませんか?

私の機能:

var popupHandler = function(handler,msg,popUp){ 

    msg = msg == "help" ? "help" : "results" 
    $(handler).click(function(){ 
     popObj.showPop(); //works 
    }) 
    $('.cls-how2play').click(function(){ 
     if(msg == 'help') popObj.closePop(); //works 
    }); 

    var popObj = { 
     showPop : function(){ 
        if(!(popUp).is(':visible')) $(popUp).fadeIn().children().find('.'+msg).show().siblings().hide(); 
       }, 
     closePop : function(){ 
        $(popUp).fadeOut() 
       } 
    } 
    return popObj; 
} 

からは次のようにouside呼び出す:

$('.ui-footer').click(function(){ 
    var closeIt = popupHandler(); 
    closeIt.popObj.closePop() }) //not works.. why? 
} 

いずれかは私に返す関数の外側からOBJ関数を呼び出すための正しい方法を助けることができますか?

ありがとうございました。

+0

'close pop'は、' return popObj; 'のために私が見る限り' popObj'への参照です。 –

+0

'msg = msg === 'help' || 'results'; ' –

+1

@roXon:' msg === 'help''は 'true'を返します。だから 'msg'は' true'か 'results''のいずれかになります。 –

答えて

2

をあなたはpopObjを返却すると、あなたのcloseIdpopObjオブジェクトに包まれていない、2つのだけの機能を取得します。そのため、あなたはpopObjせずに、そのような関数を呼び出します:

closeIt.closePop(); 
+0

私はあなたが示唆したコードを追加しても、それはそのメソッドを呼び出します。フェードアウトしないオブジェクトはなぜですか?何らかの理由があります.. – 3gwebtrain

+1

@ 3gwebtrain私は、あなたがセレクタ '$(popUp)として渡すとき、あなたの引数' var closeIt = popupHandler();を渡さずにpopupHandlerを呼び出すので 'popUp'変数は' undefined' ).fadeOut() '。 –

+0

は、メソッドから何か他のものをフェードアウトするための唯一の方法ですか? – 3gwebtrain

4

よりもむしろ

closeIt.popObj.closePop() 

あなたはそれにshowPopclosePop機能を持っていpopObjオブジェクトを返し

closeIt.closePop() 

あなたpopupHandler機能が欲しいです。だからcloseItは同じオブジェクトへの参照です。

1

あなただけ呼び出す必要があります:

closeIt.closePop(); 
1

あなたはすぐにそれを返すので、オブジェクトでこれをラップする必要はありません。

あなたは今

return{ 
showPop : function(){ 
        if(!(popUp).is(':visible')) $(popUp).fadeIn().children().find('.'+msg).show().siblings().hide(); 
       }, 
     closePop : function(){ 
        $(popUp).fadeOut() 
       } 
} 

closeIt.closePop();を書くことができ、非常にうまく動作するはずです。

1

として私はでき

popupHandlerは関数であり、

var closeIt = popupHandler(); 

へのプログラムの実行は、それがあることを意味するときpopObjは "popupHandler"

関数の戻り値の結果であるC」関数 "popupHandler"の結果によって割り当てられた "closeIt"であり、objは "popObj"と同じものである。

"closeIt"は "popObj"のコピーであると考えることができます。

"popObj"は "closeIt"のプロパティではなく、同じものです。

ので、あなたがcloseIt.closePopをコーディングする必要があります()ではなく、closeIt.popObj.closePop()、同様

なくpopObj.closePop()。

popObjがpopupHandlerの宣言で "var"されていたため、そのスコープに属していました。

関連する問題