我有一个简单的Aurelia视图和视图模型。在我看来,我有一个指向 svg 的对象,我可以执行 mouseover.delegate="domouseover()" mouseout.delegate="domouseout()",但是当我尝试使用 click.delegate="doClickSVG" 时,doClickSVG() 方法永远不会被调用!我做错了什么?请帮忙,我花了很多时间试图弄清楚这一点!
我还有一个指向另一个div中的SVG的img,当我执行click.delegate="doClickSVG()"时,它调用它就可以了。
我已经尝试了各种各样的东西来让click.delegate处理一个对象,比如让它click.trigger。我什至将 click.delegate 放在父元素上,看看这是否有帮助,但没有运气。
视图
<object class="vehicle-icon vehicle-icon-selected" type="image/svg+xml" id="svgId"
data="e-3.svg" height="50" width="50" viewBox="0 0 50 50"
mouseover.delegate="domouseover()" mouseout.delegate="domouseout()"
click.delegate="doClickSVG()">
</object>
<div>
<img src="e-3-old.svg" click.delegate="doClickSVG()"/>
</div>
视图模型导出类应用 { 消息:字符串 = "欢迎来到奥蕾莉亚!
domouseover() {
document.getElementById(event.srcElement.id).style.backgroundColor = "yellow";
document.getElementById(event.srcElement.id).getSVGDocument().getElementById("fillColor").style.fill = "blue";
}
domouseout() {
document.getElementById(event.srcElement.id).style.backgroundColor = "white";
document.getElementById(event.srcElement.id).getSVGDocument().getElementById("fillColor").style.fill = "green";
}
doClick() {
alert("in doClick");
}
doClickSVG() {
alert("in doClickSVG");
}
} 在此处输入代码
对象元素可能不允许使用委托注册单击事件。尝试替换:click.delegate
click.trigger
,看看是否有效。
下面是一个例子:https://gist.run?id=cef24c98e01402db7e7335464ff9e513
应用.html
<template>
<object type="image/svg+xml" id="svgId"
data="e-3.svg" height="50" width="50" viewBox="0 0 50 50"
mouseover.delegate="domouseover()" mouseout.delegate="domouseout()"
click.delegate="doClickSVG()">
</object>
<div>
<img src="e-3.svg" click.delegate="doClickSVG()"/>
</div>
</template>
应用.js
export class App {
message: string = 'Welcome to Aurelia!';
domouseover() {
document.getElementById(event.srcElement.id).style.backgroundColor = "yellow";
document.getElementById(event.srcElement.id).getSVGDocument().getElementById("fillColor").style.fill = "blue";
}
domouseout() {
document.getElementById(event.srcElement.id).style.backgroundColor = "white";
document.getElementById(event.srcElement.id).getSVGDocument().getElementById("fillColor").style.fill = "green";
}
doClickSVG() {
alert("in doClickSVG");
}
}