我有一个非常奇怪的问题,其中以下代码行仅在Mobile Safari中导致错误:
evt.target = evt.target || evt.srcElement;
基本上,我为一个div设置了onclick
事件,其中包含一堆a
个元素。当点击div中的a
元素时,我想弄清楚点击了哪个a
元素。我为此目的使用以下代码:
document.getElementById('the_div').onclick = someFunc(callbackFunction);
function someFunc(callbackFunction) {
return function (evt) {
evt = evt || window.event;
evt.target = evt.target || evt.srcElement;
// More code here in which callbackFunction is used with evt.target.
return false;
};
}
令人困惑的是,除了Mobile Safari之外,代码在我测试过的每个浏览器中都能正常运行。它适用于以下所有浏览器:
但是,在Mobile Safari上,evt.target
分配会导致错误,然后会导致href
元素的a
属性中的网址被跟踪。 (我希望能够查看导致的错误,但我不确定如何在Mobile Safari中执行此操作。)
如果我将上面的代码更改为以下代码,那么一切正常(请注意target
变量声明):
document.getElementById('the_div').onclick = someFunc(callbackFunction);
function someFunc(callbackFunction) {
return function (evt) {
evt = evt || window.event;
var target = evt.target || evt.srcElement;
// More code here in which callbackFunction is used with target.
return false;
};
}
是否有人对evt.target
作业仅在移动Safari中导致问题的原因有任何想法?
非常感谢你。
答案 0 :(得分:1)
嗯,event.target
实际上应该是只读的。
target
类型EventTarget
, readonly
似乎区别在于当您尝试设置其值时是否抛出Error
。有些引擎似乎只是忽略它/静默失败。
console.log(evt.target); // logs: <div id="the_div" ...></div>
evt.target = {}; // you'd expect it to be a plain `Object`
console.log(evt.target); // but, still logs: <div id="the_div" ...></div>