【发布时间】:2013-03-29 05:49:59
【问题描述】:
抱歉,这似乎很讨人喜欢...这就是为什么 firefox 没有像 Chrome 一样更改其代码以完全符合 Event 对象的原因。我已经完成了作业,尝试了 StackOverflow 上给出的几种解决方案,但似乎没有任何效果。我有这个代码:
function xpto(e) {
if( !e ) e = window.event;
var x = e.target||e.srcElement;
alert(x);
........
}
调用如下:
<svg id="graph-svg" onclick="xpto(event)" style="outline: none;" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
是的...这是一个 svg 元素,我试图点击它。我没有放完整的代码,因为它与问题无关。底线,
alert(x)
在 Firefox 上总是以未定义的形式发出警报,并且在 Chrome 上工作就像一个魅力。我可以在 Firefox 上抓取事件,但“x”总是未定义。
在 DOM 描述的 firefox 中,支持 Event 和 SVG。为了向后兼容,甚至使用“target”和“srcElement”属性定义了事件。
我在 Ubuntu 上使用 Firefox 20...有人可以帮忙吗?
【问题讨论】:
-
你试过console.log(x);在 firebug 中查看更多详细信息?
-
是的,即使是 Firebug,它也说调用中的“事件”未定义......它向我显示了一个错误,其中 onclick 应该显示为:function onclick(evt) { xpto(event) }我猜是火狐上onclick的定义……然后就落入handler中……
-
当我在 Firebug 中运行类似的代码时......像 onclick="doSomething(event)" 和 doSomething(event){console.log(event);} 它确实出现了......(并且有目标)
-
我的没有...可能是因为我在 Ubuntu 上运行,但是根据您的回答,我得到了提示并利用了它。在您回复后,我查看了代码,发现在 firefox 中有效的参数不是“event”或“Event”而是“evt”...... Firebug 中的控制台(应该是真正的浏览器名称......)显示了这一点: function onclick(evt) { xpto(event) } 因此,我意识到处理程序是用“event”而不是原始参数“evt”调用的。然后当它落入处理程序时,“事件”被作为“空”传递。我真的,真的希望这对某人有所帮助。
-
这在 Chrome 中有效的唯一原因是它复制了 IE 的
window.event,而不是因为它更“合规”。
标签: javascript jquery events firefox object