据说如果我们使用事件监听器:
document.getElementById("mybtn").addEventListener("click". function(/* event */){...});
然后我们不需要在函数的paranthesis中提到event
参数。但如果这是真的那么为什么不做以下工作:
document.getElementById("mybtn").addEventListener("click". function(/* event */){ event.preventDefault()});
答案 0 :(得分:1)
事实并非如此。只要event
不是保留关键字,就无法像正式那样实施。
因为人们可以这样做:
document.getElementById("mybtn")
.addEventListener("click",function(troll,event) {
event.preventDefault(); // Boom! error.
});
并且抱怨事件无效。然后,有必要记录人们应该不使用event
对象的方式。
某些浏览器可能有一个全局事件对象。但实施方式各不相同,依靠这些事情是不可取的。
答案 1 :(得分:1)
"有些帖子称IE允许访问window.event而不传递事件"
当微软公司在没有咨询的情况下从Netscape公司反向设计JavaScript时,他们选择不将event
作为参数传递给事件处理程序。
相反,IE实现了window.event
属性,可以访问各个事件的数据。正是在浏览器大战期间,当说服程序员为您的浏览器编写代码时,反对者的浏览器中的代码被视为好东西。由于JavaScript是单线程的,因此IE的方法不会产生任何重入问题。
您仍然可以看到以
开头的事件处理程序代码function handler(event)
{ event = event || window.event;
// handler code
}
这是一种跨浏览器的方式来获取IE的事件对象(如果没有提供给处理函数)。在某些时候,IE开始将事件对象作为参数传递,除了将其设置为窗口属性以保持其浏览器的向后兼容性。它当然可以在IE 11中使用
<span onclick="alert(arguments[0] === window.event);">click2</span>
警告&#34;真实&#39;单击时,表示event
作为参数传递。在Firefox中,window.event
不存在是错误的。
对于当前浏览器,将事件处理程序的第一个参数命名为event
。如果要支持旧版本的IE,请使用上面的跨浏览器代码。永远不要使用&#39; window.event&#39;通过它自己。
答案 2 :(得分:0)
document.getElementById("mybtn").addEventListener("click", function(event){ event.preventDefault()});
您正在将回调函数传递给addEventListener。此功能需要一个参数并且您正在使用它。
也许将其更改为其他名称并改进缩进将有助于您更好地理解这一点。
document.getElementById("mybtn")
.addEventListener("click",
function(hello) {
hello.preventDefault()
});
要了解回调函数,请尝试this
答案 3 :(得分:0)
如果你想直接使用事件,那么你必须从你调用该函数的那个函数中传递事件。否则你可以创建这样的事件:
document.getElementById("mybtn").addEventListener("click". function(/* event */){
var e=document.getElementById("mybtn");
e.preventDefault()
});