我正在使用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如何工作的一些限制吗?任何意见或建议表示赞赏。
答案 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上绑定事件。