javascript(Ext.jsを使用)のaddListenerについて

addListenerの引数で指定する関数から引数を渡したいのですが‥

1.引数がない場合は問題ない動き方をする。

// DOM読み込み時にボタンにリスナーを追加する
Ext.onReady(function() {
  Ext.get("btnCopy").addListener("click", say);
});

//ボタンが押されたときの処理
function say() {
  ・・・・・(省略)
}


しかし
2.引数(この場合"hello")を指定した場合DOM読み込み時に関数say("hello")が実行されてしまう。

Ext.onReady(function() {
  Ext.get("btnCopy").addListener( "click", say("hello") );
});

function say(greeting) {
  ・・・・・(省略)
}

DOM読み込み時にはsay()を実行させずに
ボタンをクリックしたときだけ
say("hello")と引数付きで実行させたいのですが。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/01/11 20:31:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:GoldenDawn No.1

回答回数426ベストアンサー獲得回数81

ポイント60pt

例えば

function say(p) {
  alert(p) ;
}

みたいなのを

↓こうする

function say(p) {
  return function() {
    alert(p) ;
  }
}
id:dedara

できました。ありがとうございます!

2009/01/11 20:31:17
  • id:gatchan
    こんにちは。Ext JSを2,3ヶ月触っていたものです。最近触っていませんが;

    JavaScriptの関数は
    関数名()
    という記述によって実行されてしまいます。

    挙がっている例2だと、
    Ext.get("btnCopy").addListener( "click", say("hello") );の行で実行されてしまいます。
    なのでドキュメント読み込み完了と同時にsay("hello")も実行されます。

    渡す方法を変えないといけない。ということで、以下でうまくいきませんか?
    Ext.onReady(function() {
      Ext.get("btnCopy").addListener("click", function(){say("hello")});
    });

    function say(greeting) {
      ・・・・・(省略)
    }
  • id:dedara
    詳しい解説ありがとうございます。
    そういう書き方もできるんですね、試してみます

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません