2012-04-12 15 views
0

いくつかの動的に追加された要素にイベントハンドラを追加します。私は私の問題を以下の基本コードに単純化しました。私は新しいJQuery 1.7の機能を使って、「CancelSurvey id要素のすべてのラベルが、この通知機能をクリックしたときに呼び出す」と言っています。イベントを追加するJquery

function notify(event) { 
    console.log(event.data.name); 
} 
$('#CancelSurvey').on('click', 'label', { name: $(this).attr("id") }, notify); 

パラメータの名前としてラベルのIDを渡したいとします。私はこれを警告しようとすると、定義されていません(それらはhtmlで定義されています)。私は$(this)を使っているのがこの場合にラベルセレクタを参照していないと信じています。実際には、ドキュメントそのものを参照しているようです。どのようにこれを達成するための任意のアイデア?

答えて

2

これは、ハンドラが割り当てられている囲みコンテキストのthisを評価しているためです。したがって、それはeleentへの参照ではありません。

IDを知っているので、文字列を使用できます。

$('#CancelSurvey').on('click', 'label', { name: 'CancelSurvey' }, notify); 

またはイベントデータをスキップして、ちょうどイベントを発生させたDOM要素をクリックハンドラに渡されるべきハンドラの要素から

function notify(event) { 
    console.log(this.id); 
} 
+0

クリックしたラベルのIDを渡そうとしています。この天気をしたいのですか、私はCancelSurveyを知りません。この場合は少し簡略化されています。無名関数は、私がやろうとしていることの全範囲には適切ではない – JBone

+0

@JBone:私の答えの後半を参照してください。イベントオブジェクトに格納する必要はありません。ハンドラで 'this.id'を使うだけです。関数が匿名であるかどうかは関係ありません。あなたの 'notify'関数を使用しています。 –

0

をそれを得る、あなたは可能性がありイベントハンドラでそのようにIDを取得します。ハンドラでは、thisがイベントをトリガしたDOM要素を指していることは間違いありません。

関連する問題