【问题标题】:backbone.js - events, knowing what was clickedBackbone.js - 事件,知道点击了什么
【发布时间】:2011-08-06 13:15:24
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery backbone.js underscore.js


    【解决方案1】:

    通常在事件绑定上,您只需要使用$(this),但我相当确定已设置主干视图,以便this 始终引用视图,所以试试这个:

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

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

    【讨论】:

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

    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 只会让你得到点击的内容。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      相关资源
      最近更新 更多