嵌入在对象元素中的 SVG 上的鼠标指针悬停/jquery 单击事件不起作用

Posted

技术标签:

【中文标题】嵌入在对象元素中的 SVG 上的鼠标指针悬停/jquery 单击事件不起作用【英文标题】:Mouse pointer hover/jquery click event on SVG embedded in object element not working 【发布时间】:2013-01-24 22:24:26 【问题描述】:

我正在使用 jQuery 动态添加元素以使用以下代码显示 SVG:

someEl = ('#someElement');
cancelButton = $(document.createElement('object')).attr(
            'class': 'cancelButton',
            'id':parent_id+'_xbtn',
            'data': 'img/cancelBtn.svg',
            'type': 'image/svg+xml'
        );
someEl.after(cancelButton);

function cancel() 
    alert('asd');

cancelButton.click(cancel);

我使用这个 CSS 将其设置为用手悬停:

.cancelButton:hover 
    cursor: hand;
    cursor: pointer;

但是我发现,首先当我将元素悬停时,鼠标指针并没有改变。不过,修改元素本身(例如更改背景颜色)的悬停效果可以正常工作。其次,我附加的 jQuery 点击处理程序也不会触发。

这是 <object> 元素或 SVG 工作方式的一些限制吗?任何 cmets 或建议表示赞赏。

【问题讨论】:

cursor:hand 之后添加cursor:pointer 会将光标设置为指针。只需删除 cursor:pointer 即可解决该问题 并且您的 $(this) 调用不属于任何函数 - 除非这只是代码 sn-p 的结果,否则我认为这意味着 $(this) 指的是全局对象,这将不是你想要的 这是一个代码 sn-p 的结果,对不起。这一切都在一个函数内部,它附加在有问题的元素之后就好了。 cursor: pointer 是现代浏览器使用的手的名称,但旧 IE 使用 hand,因此两者都需要。如果我删除一个它在 FF、Chrome 等中不起作用,如果我删除另一个它在 IE 中不起作用。 为了清楚起见,我删除了对 $(this) 的引用。 您可以创建一个仅限 ie 的类,一个 html5 样板:<!--[if lt IE 7]> <html class="ie" lang="en"> <![endif]--> 然后在该类中指定 hand 参考:.ie cursor: hand; 【参考方案1】:

根据我的经验,嵌入为 <object> 元素的 SVG 倾向于吞下指针事件(因为浏览器会在对象元素内创建一个新文档,类似于 iframe)。您是否有理由不能只使用<img> 标签?例如:

someEl = ('#someElement');
cancelButton = $('<img>').attr(
    'class': 'cancelButton',
    'id':parent_id+'_xbtn',
    'src': 'img/cancelBtn.svg'
);
someEl.after(cancelButton);

function cancel() 
    alert('clicked');

cancelButton.click(cancel);

编辑:

如果您需要使用&lt;object&gt; 标签(例如,因为您的 SVG 文件引用了外部资源),我的解决方案是创建一个具有相同宽度和高度的透明覆盖 div,绝对位于对象的顶部,并且而是在该 div 上绑定事件。

【讨论】:

我会试试的,谢谢!现在我刚刚保存了一个 SVG 的 PNG 并且一直在使用它。 嗨,我真的很抱歉。这确实有效,但在某些较旧的浏览器中不起作用,所以我没有在我的项目中使用它,我以为我已经接受了。

以上是关于嵌入在对象元素中的 SVG 上的鼠标指针悬停/jquery 单击事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

悬停链接并在 SVG 中更改颜色 [重复]

jQuery SVG - 悬停元素

在悬停另一个元素时更改 SVG 填充颜色

Chromium SVG 悬停 <title> 工具提示怪异

当我在 SVG 中将鼠标悬停时,如何显示和隐藏同级元素?

使用嵌入或对象标签中的元素