【问题标题】:Do jQuery events on object elements work?对象元素上的 jQuery 事件有效吗?
【发布时间】:2012-05-25 07:34:06
【问题描述】:

我无法成功地将 jQuery 事件侦听器附加到 <object> 类型的元素上,并让它接收在该事件上触发的任何事件。

因此:

<object></object>

使用 JavaScript:

$('object').on('foo', function(evt, data){ alert(data) });
$('object').trigger('foo', 'object-on-object');

如果我在$('body') 上有完全相同的代码,那么它可以正常工作。另外,如果我在 &lt;body&gt;$('object').trigger() 上监听事件,那么我确实会收到事件。

我有一个 jsFiddle 来证明这一点。在其中您会看到bar 事件没有导致输出,但两个foo 事件有。

【问题讨论】:

  • 大声笑,这里有一个魔法:与 .live 一起使用已被弃用:jsfiddle.net/vNqZD/1 但是别担心,我正在研究这个,很快就会给你一个更新:P I我在 osx safari 上,可以看到你的问题 - 有趣 - 我敢打赌这将是一个微小的 lil 解决方案。
  • @Tats_innit:嗯,这很有趣。我没想过要尝试弃用的功能。我也会看看 jQuery 源代码。
  • @MatthewSchinckel 哈哈,我现在正在阅读它 B-) 应该有一些非常小的原因。
  • $.live$.on 的等效语法也可以。 FIDDLE
  • Bruv - 我转了一圈,唯一可行的方法是使用已弃用的.live,请参见此处:groups.google.com/group/jquery-dev/browse_thread/thread/… 将为您提供有关当前问题的进一步阅读。

标签: jquery events object


【解决方案1】:

所以,答案似乎是否定的。根据this thread 的说法,存在与绑定事件相关的问题,或者可能使用 jQuery 和&lt;object&gt; 元素做任何有趣的事情。

解决方案似乎是让事件在其他地方冒泡。 $(document) 似乎是一个有效的选择,因此您可以执行以下操作:

$(document).on('foo', 'object', {data: data}, handler);

$('object').trigger('foo');

这对于我想要的东西来说是一种错误的方式(我希望能够告诉消费者监听插件元素上的事件),但它运行得很好。无法在代码中解决的问题,请在文档中解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2021-02-28
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多