[待解决问题] 知道这段代码先弹哪个alert么请解释下原因及为什么(ie7
提问时间: 2008-03-28 23:00
该问题已到期 浏览:208 次

<html>
<head>
<script>
 var app = function()
 {
  var obj = document.getElementById("mypp");
  obj.attachEvent("onclick",foo1);
  obj.attachEvent("onclick",foo2);
 }

  var foo1 = function()
  {
  alert("clicked!");
  };
  var foo2 = function()
  {
  alert("also clicked!");
  };
 </script>
</head> 
 <body onload="app()">
  <p id="mypp">test</p>
    </body>
</html>


所有回答(3)
先出现also clicked!的,个人认为obj.attachEvent应该是栈结构的缘故,后进先出
1个月前   回答者:BlackPhoenix - 初学一级
听某牛人说过,.net中的事件不一定按绑定的顺序发生, 事件激发的顺序不可控, 但是具体的原因未说明, 不知道在js是否也是这样子滴~~~
1个月前   回答者:沙加 - 老鸟四级
这一个的确是先执行also clicked!,不过,微软说这个执行顺序是随机的,所以不要依赖这个顺序哪怕你是测试过的!
其实事件附加类似于集合操作,每附加一个事件都会往集合里加一条数据,可以添加,但集合是没有办法保证顺序的,虽然每次的顺序可能差不多,但既然他不肯保证,你也就不能依赖,你试下下面这个就知道了,完全没谱:
<html>
<head>
<script>
var app = function()
{
var obj = document.getElementById("mypp");
obj.attachEvent("onclick",foo1);
obj.attachEvent("onclick",foo2);
obj.attachEvent("onclick",foo3);
obj.attachEvent("onclick",foo4);
obj.attachEvent("onclick",foo5);
obj.attachEvent("onclick",foo6);
obj.attachEvent("onclick",foo7);
}
var foo1 = function(){alert("1");};
var foo2 = function(){alert("2");};
var foo3 = function(){alert("3");};
var foo4 = function(){alert("4");};
var foo5 = function(){alert("5");};
var foo6 = function(){alert("6");};
var foo7 = function(){alert("7");};
</script>
</head> 
<body onload="app()">
<p id="mypp">test</p>
</body>
</html>

1个月前   回答者:丁学 - 老鸟四级
1个月前   丁学 :
to  BlackPhoenix:
obj.attachEvent是集合,不是栈,所以不一定后进先出,呵呵,顺序取决于集合的算法,这个我就不知道了,不知道是不是公开的
to 沙加:
事件激发的顺序不可控是因为.net里的事件附加也是用的集合,集合的排序方式未知,所以说是不可控,其实我觉得微软应该公开这个事件集合的排序方法好让大家重写,毕竟有时候是需要这个的
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除