いくつかのコントロールを動的に生成しているとします (jQuery を使用した例):
for (var c=0 ; c<100 ; c++) {
$(body).append('<input id="btn_'+c+'" type="button" value="Button #'+c+'" />');
}
また、クリックされたボタン (マウスオーバーなど) に応じて異なるアクションを実行したいのですが、クリックされているボタンを認識できるようにハンドラーをアタッチするためのベスト プラクティスは何ですか? 私は3つの選択肢を考えることができます:
- 同じハンドラーを (JavaScript 経由で) すべてのボタンにアタッチし、ハンドラーに要素 ID を解析させて、どのボタンがクリックされたかを判断します。
- コントロールの HTML を生成するときにハンドラーをインラインで追加します (つまり、onclick="do_something('+c+');" を持っています)。
- ハンドラの引数にボタン番号が設定されている要素ごとに、異なるハンドラを (ループなどで) アタッチします。
どちらの方法が好ましいですか、それとも別の方法がありますか?
編集:
申し訳ありませんが、生成される要素の数は可変であり、ハンドラーにはボタン番号のみが必要であることに言及する必要があります (つまり、ボタンごとに完全に異なるハンドラー関数ではありません)。簡単なユースケースの例は、ユーザーに順序付けさせたい ajax を介して取得したリストです。この場合、ハンドラーはリストのインデックス番号のみを必要とします。
個別のハンドラーを持つ固定数の要素の場合、Davidの答えは理にかなっています。