Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Enyo 2.0中的SVG控件处理事件(对象或嵌入标记)_Javascript_Html_Events_Svg_Enyo - Fatal编程技术网

Javascript 使用Enyo 2.0中的SVG控件处理事件(对象或嵌入标记)

Javascript 使用Enyo 2.0中的SVG控件处理事件(对象或嵌入标记),javascript,html,events,svg,enyo,Javascript,Html,Events,Svg,Enyo,我有这个控件来加载SVG文档(工作正常,SVG显示良好) 但是“tap”和“load”的事件处理程序从未被触发,有人能解释一下我做错了什么吗?提前感谢事件不会被触发,因为您试图在尚未创建Enyo组件的DOM节点时修改DOM节点属性。DOM节点是在呈现组件时创建的。将sourceChanged()函数移动到控件的rendered()函数中,或者如果在控件的create()函数中需要它,请在控件上调用hasNode(),强制它首先创建DOM节点。尝试此版本的sourceChanged()函数,看看它

我有这个控件来加载SVG文档(工作正常,SVG显示良好)


但是“tap”和“load”的事件处理程序从未被触发,有人能解释一下我做错了什么吗?提前感谢

事件不会被触发,因为您试图在尚未创建Enyo组件的DOM节点时修改DOM节点属性。DOM节点是在呈现组件时创建的。将sourceChanged()函数移动到控件的rendered()函数中,或者如果在控件的create()函数中需要它,请在控件上调用hasNode(),强制它首先创建DOM节点。尝试此版本的sourceChanged()函数,看看它是否有效:

sourceChanged: function() {
    var svgObj = this.$.svgObject;
    if (svgObj.hasNode()) {
       svgObj.setAttribute("type", 'image/svg+xml');
       svgObj.setAttribute("data", this.source);
    }
},

实际上,您有两个独立的问题,一个阻止
加载
处理程序工作,另一个阻止
点击
处理程序工作

未调用
load
处理程序,因为您需要告诉Enyo侦听
标记上的
load
事件。您可以通过调用
enyo.makeBubble()
来实现这一点

未调用
tap
处理程序,因为包含SVG图像的
标记上的单击/点击事件被路由到图像本身的DOM中。要在HTML中拦截它们,您需要将
包装在透明的
中,并给
一个负数
z-index

我在这里做了一个小提琴来演示这两种技术:


有关SVG包装技术的背景信息,请参阅。

thx以获取快速回复,但它仍然不起作用。看来我的问题与此有关
sourceChanged: function() {
    var svgObj = this.$.svgObject;
    if (svgObj.hasNode()) {
       svgObj.setAttribute("type", 'image/svg+xml');
       svgObj.setAttribute("data", this.source);
    }
},