2012-03-02 20 views
0

私は、画面上のクリックをリッスンし、コールバックを起動する関数を持っています。それは私のサンプルコードで用語ヘルパーによって先行される理由である(ヘルパーオブジェクトの一部である。すなわち、しかし無関係である。コールバック関数へのパラメータの受け渡し

var Helper = { 
    bodyClickListener: function(fn) { 
     var window = document.getElementsByTagName('body')[0]; 
     window.click(); 
     CORE.dom.on(window, 'click', function(event) { 
      CORE.dom.off(window, 'click'); 
      fn(event); 
     }); 
    } 
} 

私はそのパラメータと、この関数に関数を通過できるようにする必要があります以前作品上記のコード

function someFunction() {  
    var popup = document.getElementById('tagResultsPopup'); 
    Helper.bodyClickListener(function(popup) { 
     return function(event) { 
      event.stopPropagation(); 
      removePopup(popup); 
     };    
    }(document.getElementById('tagResultsPopup'))); 

    function removePopup(element) { 
     if(element) { 
      element.parentNode.removeChild(element); 
     } 
    }; 
} 

。設定されているが、あなたは、私は、コールバック関数の内部でポップアップ変数を設定する必要があることに気づくでしょう。それはすでにどのように私はへの参照を渡すん。上記設定されていますコールバック関数の前の変数。

答えて

0

答えは、このようにクロージャを使用していた:

Helper.bodyClickListener(function(popup) { 
    return function(event) { 
     event.stopPropagation(); 
     removePopup(popup); 
    };    
}(document.getElementById('tagResultsPopup'))); 

コールバック関数は、私は、パラメータ関数に渡す変数へのアクセス権を持っているこの方法。ここで、戻り値は実際にコールバックとして渡している関数です。

0

もし私があなたの質問を正しく理解してください。多くのことをする必要はありません。外に定義されたpopup変数を使用することができます。

var popup = document.getElementById('tagResultsPopup'); 
Helper.bodyClickListener(function(event) { 
    event.stopPropagation(); 
    //Don't set it 
    //var popup = document.getElementById('tagResultsPopup'); 
    removePopup(popup);//popup will refer to the correct variable 
}); 
+0

私はこれが本当だったと思うが、残念ながらそれは動作しません。 bodyClickListenerは、popup変数と同じ関数内にありません。私は関数を呼び出して関数に渡します。 – ryandlf

+0

@ryandlfそれはあなたの質問から非常に明確ではありません。それでは、なぜあなたはどうして**要素をもう一度手に入れることができないのですか? – gideon

+0

申し訳ありませんが、私はあなたを混乱させていると思います。 Helper.bodyClickListenerはPopup変数と同じ機能ですが、Helper.bodyClickListenerが呼び出す実際の関数はHelperオブジェクトにあります。私はそれが変数が渡されない理由と何か関係があるかどうかは分かりません。 – ryandlf

0

bodyClickListenerに渡す関数はクロージャです。あなたはその機能の中で問題なく簡単に 'ポップアップ'を参照することができます。新しい変数を作成する必要はありません。

関連する問題