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

时间:2013-02-09 03:38:35

标签: jquery css svg hover

我正在使用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;
}

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

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

1 个答案:

答案 0 :(得分:2)

根据我的经验,作为<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);

修改

如果您需要使用<object>标签(例如,因为您的SVG文件引用外部资源),我的解决方案是创建一个宽度和高度相同的透明叠加div,绝对位于对象的顶部,并在该div上绑定事件。