【问题标题】:How to bind click event to object tag?如何将点击事件绑定到对象标签?
【发布时间】:2014-09-18 15:10:36
【问题描述】:

我有这个代码

<object data="images/logo.svg" type="image/svg+xml" class="icon-logo"></object>

和jquery

$(".icon-logo").click(function() {
.....
});

但我无法点击事件。

【问题讨论】:

  • 我认为您无法捕捉到对&lt;object&gt; 标签的点击。
  • 你可以点击任何你想要的东西
  • 点击事件支持所有 HTML 元素,除了:
    、、
  • 如果回答对您有帮助,您会接受吗?

标签: javascript jquery html


【解决方案1】:

实现这一目标的最简单方法是将对象标签包装在一个 div 中,将点击监听器绑定到该 div,并将pointer-events: none 添加到对象标签的样式中。

小提琴示例:

.clickable {
  background: red;
  width: 100px;
  height: 100px;
  border-radius: 100px;
  overflow: hidden;
}

object {
  width: 100%;
  pointer-events: none;
}
<div class='clickable' onclick='alert("WOW")'>
  <object type='image/svg+xml' data='https://douglasduhaime.com/assets/images/icons/home.svg' />
</div>

【讨论】:

  • 这在当前版本的 Chrome(撰写本文时为 66)中不起作用,但在 IE11 和 Firefox 60 中起作用。
  • @beginner_ 你能发布一个不能在 Chrome 中工作的小提琴吗?我将添加一个可以在 Chrome 中运行的版本,我们可以进行比较。
  • 我不知道。据我所知,其余的布局不知何故与此混淆。诚然,我知道无论如何都必须改变整个方法,因为在使用具有数据属性的对象时,IE11 无法正确显示 svg。它在通过 ajax 获取 svg 并将其附加到父级时正确显示。所以我现在放弃了对象标签,完全解决了这两个问题......
【解决方案2】:

1。问题:事件处理

关于 jQuery 部分,尝试使用事件委托。

来自docs

.on() 方法将事件处理程序附加到当前选定的集合 jQuery 对象中的元素。

$(document).on('click', '.icon-logo', function(event) {
    document.write('Event type: ' + event.type);
    document.write('<br>CSS-Class: ');
    document.write($(this).attr('class'));
});
// As said in the docs, you can attach multiple events to multiple selectors. 
// A typical example of use may be:
// $(document).on('change blur', '.icon-logo .some-other-class', function() {...}
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<object data="images/logo.svg" type="image/svg+xml" class="icon-logo" style="cursor: pointer;">Click me!</object>

@Kaiido 评论后编辑:

2。问题:&lt;object&gt; 元素无法点击。

一种可能性可能是根本不使用&lt;object&gt;,而是使用&lt;img&gt; 标记,如此SO 答案中所建议的那样:make an html svg object also a clickable link


2。问题:空 HTML 标记

这种标签&lt;object&gt;需要一些内容才能显示在页面上。

你的标签:

&lt;object data="images/logo.svg" type="image/svg+xml" class="icon-logo"&gt;&lt;/object&gt;

没有任何内部 HTML 内容,因此您将无法单击它。

【讨论】:

  • 我以前从未见过这种语法。我很喜欢。顺便提一句。 &lt;input type="button" value="text"&gt; 没有 innerHTML 但仍然可以点击。
  • @NULL 你的意思是什么语法?谢谢指正。编辑答案
  • @NULL 读到这里,亲爱的:blog.stackoverflow.com/2014/09/… 用起来很不错
  • 对于“空 HTML 标记”,这不是问题。这是因为对象元素受到与 iframe 相同的安全限制,并且不会让主文档知道用户在其中做什么。
猜你喜欢
  • 2023-04-08
  • 2014-02-13
  • 2011-09-17
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2011-05-18
相关资源
最近更新 更多