backbone.js-何がクリックされたかを知るイベント


96

私のbackbone.jsビュークラスの1つには、次のようなものがあります。

...

events: {
  'click ul#perpage span' : 'perpage'
},

perpage: function() {
  // Access the text of the span that was clicked here
  // Something like: alert($(element).text())
},

...

私のページごとのマークアップは次のようなものになるかもしれないので:

<ul id="perpage">
  <li><span>5</span></li>
  <li><span>10</span></li>
</ul>

では、イベントを発生させた要素に関する情報をどのように正確に見つけることができますか?または、この例では、それがクリックされましたか?

回答:


132

通常、イベントバインドではを使用し$(this)ますが、this常にビューを参照するようにバックボーンビューが設定されていると確信しているので、次を試してください。

perpage: function(ev) {
   alert($(ev.target).text());
}

本当に遅い編集:おそらく使いたいでしょう$(ev.currentTarget)。以下のpawlikの回答についての説明を参照してください


1
私が正しければ、これはjqueryイベントで動作します(1つは投稿者の質問です)。ただし、バックボーンのtrigger()関数によってトリガーされたイベントはこの情報を伝達しないことに注意してください(代わりに、trigger()を呼び出すときに使用される引数が提供されます)
Jens Alm

1
@roufamatic —これらは実際には標準のJavaScriptイベントなので、BackboneJSの範囲外です。これらのドキュメントには、HTMLやCSSの参照も含まれていません。
12

1
「バックボーンビューは、常にビューを参照するように設定されています。」—これは、(バックグラウンドで前者のメソッドを使用して)に渡されるオブジェクトで、delegateEvents([events])またはevents渡されるオブジェクトで定義されたイベントにのみ適用されますBackbone.View.extend。これは、初期化子にバインドされたイベントには適用などの方法レンダリングされません
skalee

98

ev.target誤解を招く可能性があるため、http://www.quirksmode.org/js/events_order.htmlのev.currentTarget説明に従って使用する必要があります


2
知っておくと便利ですが、IEには実装されていないようです。またはjQueryはこれを修正するために正規化を行っていますか?
ジェイミーウォン

2
jQuery は、イベント初期化するdom要素としてev.targetと、イベントバブリングフェーズ内の現在のDOM要素 としてev.currentTargetの両方を正規化しているようです。api.jquery.com
category / events /

6
私はこれをいじっていましたが、明確にするために、おそらくev.currentTargetが必要です。これは正規化されており、jQueryでサポートされているすべてのブラウザーで使用できます。
mikermcneil 2011

4
はい、targetの代わりにcurrentTargetを使用します。たとえば、子オブジェクトを含むリンクをバインドする場合、「<a> <span> text </a>」ターゲットは<a>ではなく<span>を指すことができます。
エフゲニー

これが答えになるはずです。event.targetクリックされたものだけを取得します。
Lorem、2016年

0

必要な属性を取得できます。ev として機能しthisます:

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.