骨架.js-事件,知道点击了什么


96

在我的骨干.js视图类之一中,我有类似以下内容:

...

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>

那么,如何准确找到有关导致事件的元素的信息?还是在这种情况下被点击?

Answers:


132

通常在事件绑定上,您只需要使用$(this),但是我很确定Backbone视图已设置为this始终引用该视图,因此请尝试以下操作:

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

后期编辑:您可能想使用$(ev.currentTarget)。参见下面有关pawlik答案的讨论


1
如果我是正确的,那么这可以与jquery事件一起使用(有人问这个问题)。但是请注意,通过主干网的trigger()函数触发的事件不会携带此信息(而是为您提供调用trigger()时使用的参数)
Jens Alm

1
@roufamatic-因为这些确实是标准的JavaScript事件,所以它不在BackboneJS的范围内。这些文档也不包括HTML或CSS的参考。
skalee 2012年

1
“设置了主视图,以便始终引用该视图” —仅适用于使用delegateEvents([events])或通过events对象传递Backbone.View.extend(使用幕后的前一种方法)定义的事件。这并不适用于初始绑定事件,渲染方法等等
skalee

98

ev.target可能会产生误导,您应该ev.currentTarget按照http://www.quirksmode.org/js/events_order.html所述使用


2
很高兴知道-但是看起来好像没有在IE中实现-还是jQuery进行规范化来解决此问题?
Jamie Wong

2
看起来jQuery 在事件冒泡阶段api.jquery.com/category/events/event-object 内将 ev.target作为初始化事件dom元素,将 ev.currentTarget标准化为当前DOM元素
mikermcneil 2011年

6
我只是在玩这个,澄清一下,您可能需要ev.currentTarget。它是标准化的,可以在所有jQuery支持的浏览器中安全使用。
mikermcneil

4
是的,您要使用currentTarget而不是target。例如,如果绑定包含子对象“ <a> <span>文本</a>”的链接,则目标可以指向<span>而不是<a>。
Evgenii

这应该是答案。event.target只会让您得到点击。
洛雷姆

0

您可以获取所需的任何属性。ev 用作this

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.