ChatGPT解决这个技术问题 Extra ChatGPT

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

在我的一个backbone.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>

那么我如何才能找到有关导致事件的元素的信息呢?或者在这种情况下,它被点击了?


J
Jamie Wong

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

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

真的晚了编辑:您可能想使用 $(ev.currentTarget)。请参阅下面关于 pawlik 答案的讨论


如果我是正确的,这适用于 jquery 事件(海报询问的那个)。但是请注意,通过主干的 trigger() 函数触发的事件不携带此信息(它会为您提供调用 trigger() 时使用的参数)
@roufamatic - 因为这些是真正的标准 JavaScript 事件,所以它超出了 BackboneJS 的范围。这些文档也不包括 HTML 或 CSS 的参考。
“设置主干视图以便 this 始终引用视图”——这仅适用于使用 delegateEvents([events]) 定义的事件或将 events 对象传递给 Backbone.View.extend(在幕后使用前一种方法)。这不适用于在初始化程序、渲染方法等中绑定的事件。
p
pawlik

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


很高兴知道 - 但它似乎没有在 IE 中实现 - 或者 jQuery 是否通过规范化来解决这个问题?
看起来 jQuery 将 ev.target 规范化为初始化事件的 dom 元素,并将 ev.currentTarget 规范化为 事件冒泡阶段中的当前 DOM 元素 api.jquery.com/category/events/event-object
我只是在玩这个,澄清一下,你可能想要 ev.currentTarget。在所有支持 jQuery 的浏览器中使用它是规范化和安全的。
是的,您想使用 currentTarget 而不是 target。例如,如果您绑定包含子对象“text”的链接,则目标可以指向 而不是
这应该是答案。 event.target 只为您提供点击的内容。
N
Nvan

你可以得到任何你想要的属性。 ev 用作 this

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}