是否有任何理由为evt.target赋值会导致仅在Mobile Safari中出错?

时间:2013-08-03 21:58:38

标签: javascript debugging javascript-events onclick mobile-safari

我有一个非常奇怪的问题,其中以下代码行仅在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之外,代码在我测试过的每个浏览器中都能正常运行。它适用于以下所有浏览器:

  • 火狐
  • IE6-10
  • Safari(在Windows上)

但是,在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中导致问题的原因有任何想法?

非常感谢你。

1 个答案:

答案 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>

http://jsfiddle.net/YaCv2/