13

MyClassメソッドを定義した JavaScript クラスを作成しました。closeThis

MyClass = function() {
  this.closeThis = function() {
    document.getElementById("hidePane").style.display = 'none';
  }
}

今、私のhtmlで、私はそれを次のように呼び出そうとしています...

<script type="text/javascript">
  function callThis() {
    var myclassObj = new MyClass();
    document.getElementById("closeButton").onclick = myclassObj.closeThis();
  }
</script>

ボタンをクリックすると、上記callThisが呼び出されます。ここでの問題は、ページの読み込み時にonclickイベントがclsoeButtion自動的に呼び出されることです。これで何が間違っている可能性がありますか?

4

3 に答える 3

17

あなたはすぐに関数を呼び出しています。

関数参照に括弧を残すと、基本的には次のようになります。

closeThis 関数を評価し、結果を onclick に割り当てます

本当にやりたいことは、関数参照をクリック ハンドラーに割り当てることです。

document.getElementById("closeButton").onclick = myclassObj.closeThis;

代わりに括弧を省略し、closeThis 関数を onclick にバインドします。これが代わりに言うことは次のとおりです。

関数 closeThis をクリック ハンドラーに割り当てます。

基本的に、関数をファーストクラスのオブジェクトまたは関数への参照として変数に割り当てています。

余談ですが、私の個人的な好みは、常に無名関数ラッパーを使用することです。場合によっては、関数にパラメーターを渡すことができるようにする必要があります。これにより、より簡単に渡すことができます。

document.getElementById("closeButton").onclick = 
    function() {
        myclassObj.closeThis();
    };
于 2012-04-11T07:50:41.950 に答える
5

それはすべきではあり document.getElementById("closeButton").onclick = myclassObj.closeThis; ません myclassObj.closeThis();

myclassObj.closeThis()関数を呼び出してから onclick に値を代入します

于 2012-04-11T07:53:38.843 に答える
2

それを削除する必要があります。()そうしないと、すぐに呼び出されます。これは、サフィックス を付けて関数を呼び出す方法()であるため、これらの中括弧を削除するだけです。

document.getElementById("closeButton").onclick = myclassObj.closeThis;
于 2012-04-11T07:51:00.110 に答える