首页 > JavaScript 这段代码,如果把 function 括号里的删了,ie就不正常,但是非ie就正常,这个区别有什么讲究?

JavaScript 这段代码,如果把 function 括号里的删了,ie就不正常,但是非ie就正常,这个区别有什么讲究?

就是带星星的地方:
本来我就试试删了event行吗,后来发现ie不可以,别的可以
请问这是什么讲究?

<!DOCTYPE html>
<html>
<head>
<title>鼠标位置</title>

<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>

<script>

    $(document).ready(function()
    {
        $(document).mousemove(f);
    });

    var f=function(event)//★★★★★★★★★★★★★★★★★★★★★★★★★★
    { 
        $("span").text("X: " + event.pageX + ", Y: " + event.pageY);
    };

</script>


</head>

    <body>

    <p>The mouse pointer position is at: <span></span></p>

    </body>

</html>

把 function 参数里的 event 去掉之后,函数体里的 event 会尝试访问全局的 event 对象。但全局的 event 也就是 window.event 并不是一个标准属性,你看到 IE 里能访问到时因为 IE 里有支持这个,而且貌似现在只有 IE 支持这个。window.event 的详情可以看这里: https://msdn.microsoft.com/en-us/library...


event对象在ie中是全局的window.event。在FF中是做为句柄传入的argument.0。在ie中传去参数event则会默认创建window.event,该参数与FF的event刚好相同,所以容易让人混淆。


应该是别的不可以,IE可以吧
IE有一个全局的window.event对象,其他浏览器没有

IE:有window.event对象
FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event)
解决方法:

  function test(event) {
  var event = event || window.event;
      //do Something
  }

// 楼主可以看下ie事件绑定的兼容

var f = function(e) {
    var e = e || window.event;
    $("span").text("X: " + e.pageX + ", Y: " + e.pageY);
}

ie:仅支持window.event
firefox:仅支持function(event
chrome:都支持

【热门文章】
【热门文章】