Aurelia click.delegate 不处理对象元素,mouseover.delegate 工作正常



我有一个简单的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");
  }
}

最新更新