【问题标题】:How to access jquery function properties from event如何从事件中访问 jquery 函数属性
【发布时间】:2014-10-30 23:24:59
【问题描述】:

使用jQuery和coffeescript,如果我有以下html:

<div id="main"></div>

以及以下咖啡脚本:

button = $('<div>Click here</div>')
button.some_var = "secret message"
button.on "click", ->
    alert this.some_var
$('#main').html button

这不起作用。有什么办法让它工作吗?或者任何其他方式让特定元素的点击事件可以访问特定 Javascript 函数的属性?

【问题讨论】:

  • button 是一个 jQuery 对象,this 是一个 DOM 元素。它们不是同一个对象。

标签: javascript jquery coffeescript jquery-events


【解决方案1】:

您可以使用.data 在 jQuery 对象上存储数据。

button = $ '<div>Click here</div>'

button.data 'some_var', 'secret message'

button.on 'click', ->
    alert $(@).data 'some_var'

JsFiddle Demo

【讨论】:

  • $(this) 而不是button
  • @FelixKling 好点,我认为这也会使其更清晰。
  • 好的。如果数据是对象而不是字符串,这应该有效吗?我没有让它工作。具体来说,我正在尝试做:this.data('mpclubSource').start(0) 其中数据是 AudioBufferSourceNode
  • 让它与$(@).data('mpclubSource').start(0) 一起工作。惊人的。非常感谢@KyleNeedham!
  • @JesseGoodfellow:类似的问题,事件处理程序中的this 指的是 DOM 元素.data() 是一个 jQuery 方法。也许看看learn.jquery.com/events/event-basics
【解决方案2】:

jQuery 绑定方法的上下文设置为触发事件的DOM 元素。您针对 jQuery 对象而不是 DOM 元素节点设置属性 .some_var

如果你想根据元素存储属性,你可以这样做:

button.get(0).somevar = "secret message"

正如@Kyle 评论的那样——如果你想简单地将数据与元素关联,最好在jQuery 对象上使用.data() 方法,它允许键值对在不操作原生元素的情况下存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 2014-04-29
    • 2023-04-10
    • 1970-01-01
    • 2017-10-26
    • 2018-07-12
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多