为什么我的代码中的event.target无法在firefox中运行?

时间:2013-03-29 06:57:39

标签: javascript

为什么我的代码中的event.target无法在firefox中运行?

 <script> 
    document.onmousedown = function(){
     var e = window.event;
     var target = e.srcElement || e.target || e.currentTarget;
     if(target.className == 'box'){
     alert("Yeah");
     }
     }
    </script>



<body>
  <div class="box" style="border:1px dotted #CC3366; width:300px; height:100px;">Click Me!!</div>
  <a href="#" class="box">Link</a>
 </body>

它可以在IE或Chrome中运行但不在Firefox中。

2 个答案:

答案 0 :(得分:1)

Firefox要求将事件显式定义为处理程序的参数。

你可以这样写:

document.onmousedown = function(e) {
    e = e || window.event;
    var target = e.srcElement || e.target || e.currentTarget;
    if (target.className == "box") {
        alert("Yeah");
    }
};

答案 1 :(得分:0)

Firefox不支持window.event,因为它不是任何标准的一部分,Microsoft在事件标准化之前将其创建为其专有事件模型的一部分。

忘记这些差异,even the standard DOM is a mess。这就是为什么开始创建JS DOM库的原因,它们使得处理DOM的大多数任务变得更加容易和平滑,而不是事件模型和其他事物的实现差异。

例如,可以使用jQuery将代码重写为

$('.box').mousedown(function(){
  alert("Yeah");
});

一般来说,将事件附加到文档或正文是一个坏主意。此jQuery代码查找具有.box类的任何元素,并将mousedown处理程序直接附加到它们。