我有一个非常奇怪的问题,以下代码行仅在 Mobile Safari 中导致错误:
evt.target = evt.target || evt.srcElement;
基本上,我onclick
为一个包含一堆a
元素的 div 设置了一个事件。当a
单击 div 中的元素时,我想弄清楚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。它在以下所有浏览器中都能正常工作:
- 铬合金
- 火狐
- 歌剧
- IE6-10
- Safari(在 Windows 上)
但是,在 Mobile Safari 上,evt.target
赋值会导致错误,然后会导致元素href
属性中的 URLa
被跟随。(我希望能够查看导致的错误,但我不确定如何在 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
分配只会在 Mobile Safari 中引起问题?