Javascript 为什么preventDefault不与默认事件参数连接?

Javascript 为什么preventDefault不与默认事件参数连接?,javascript,Javascript,据说,如果我们将事件侦听器用作: document.getElementById("mybtn").addEventListener("click". function(/* event */){...}); 然后,我们不需要在函数的参数中提到事件参数。但如果这是真的,那么为什么以下方法不起作用: document.getElementById("mybtn").addEventListener("click". function(/* event */){ event.preventDef

据说,如果我们将事件侦听器用作:

document.getElementById("mybtn").addEventListener("click". function(/* event */){...});
然后,我们不需要在函数的参数中提到
事件
参数。但如果这是真的,那么为什么以下方法不起作用:

 document.getElementById("mybtn").addEventListener("click". function(/* event */){ event.preventDefault()});
您正在向addEventListener传递回调函数。此函数接受一个参数,您正在使用它

也许把它改成另一个名字并改进缩进可以帮助你更好地理解这一点

document.getElementById("mybtn")
.addEventListener("click",
function(hello) { 
    hello.preventDefault()
});
要理解回调函数,请尝试

您正在向addEventListener传递回调函数。此函数接受一个参数,您正在使用它

也许把它改成另一个名字并改进缩进可以帮助你更好地理解这一点

document.getElementById("mybtn")
.addEventListener("click",
function(hello) { 
    hello.preventDefault()
});

要理解回调函数,请尝试

如果您想直接使用event,则必须从调用该函数的位置在该函数中传递event。否则,您可以创建如下事件:

document.getElementById("mybtn").addEventListener("click". function(/* event */){
 var e=document.getElementById("mybtn");
 e.preventDefault()
});

若要直接使用事件,则必须从调用该函数的位置在该函数中传递事件。否则,您可以创建如下事件:

document.getElementById("mybtn").addEventListener("click". function(/* event */){
 var e=document.getElementById("mybtn");
 e.preventDefault()
});

事实并非如此。只要
事件
不是保留关键字,它就不能像这样正式实现

因为人们可以这样做:

document.getElementById("mybtn")
.addEventListener("click",function(troll,event) { 
  event.preventDefault(); // Boom! error.
});
投诉事件不起作用。然后有必要记录人们应该如何而不是
使用
事件
对象


某些浏览器可能具有全局事件对象。但实现方式各不相同,不建议依赖这些东西。

这是不正确的。只要
事件
不是保留关键字,它就不能像这样正式实现

因为人们可以这样做:

document.getElementById("mybtn")
.addEventListener("click",function(troll,event) { 
  event.preventDefault(); // Boom! error.
});
投诉事件不起作用。然后有必要记录人们应该如何而不是
使用
事件
对象

某些浏览器可能具有全局事件对象。但实现方式各不相同,不建议依赖这些东西。

历史。 “一些帖子说IE允许在不传递事件的情况下访问window.event”

当微软公司未经协商就将JavaScript从Netscape公司逆向工程出来时,他们选择不将传递
事件作为事件处理程序的参数

相反,IE实现了一个
window.event
属性,可以在其中访问单个事件的数据。在浏览器战争期间,说服程序员为你的浏览器编写代码,但在反对党的浏览器中失败被视为一件好事。由于JavaScript是单线程的,IE的方法不会产生重入问题

您仍然可以看到事件处理程序代码以

function handler(event)
{   event = event || window.event;
    //  handler code    
}
这是一种跨浏览器方式,用于在未提供给处理程序函数的情况下拾取IE的事件对象。在某个时刻,IE开始将事件对象作为参数传递,并将其设置为窗口属性,以保持浏览器中的向后兼容性。它在IE11中确实有效

<span onclick="alert(arguments[0] === window.event);">click2</span>
点击2
单击时发出“true”警报,表示
事件
作为参数传递。在Firefox中,它在基础
窗口上为false。事件
不存在

对于当前浏览器,将事件处理程序的第一个参数命名为
event
。如果要支持旧版本的IE,请使用上面的跨浏览器代码。切勿单独使用“window.event”。
另外,在IE11,IE版本历史中尝试文档模拟模式。 “一些帖子说IE允许在不传递事件的情况下访问window.event”

当微软公司未经协商就将JavaScript从Netscape公司逆向工程出来时,他们选择不将传递
事件作为事件处理程序的参数

相反,IE实现了一个
window.event
属性,在该属性中可以访问单个事件的数据。在浏览器大战期间,说服程序员为您的浏览器编写代码在反对党的浏览器中失败被视为一件好事。由于JavaScript是单线程的,因此不会产生重入问题艾迪的方法

您仍然可以看到事件处理程序代码以

function handler(event)
{   event = event || window.event;
    //  handler code    
}
这是一种跨浏览器的方式,如果没有提供给处理程序函数,则可以拾取IE的事件对象。在某个时候,IE开始将事件对象作为参数传递,并将其设置为窗口属性,以保持浏览器中的向后兼容性。在IE 11中,它当然有效,其中

<span onclick="alert(arguments[0] === window.event);">click2</span>
点击2
单击时警告“true”,表示
事件
作为参数传递。在Firefox中,它在基础
窗口上为false。事件
不存在

对于当前浏览器,将事件处理程序的第一个参数命名为
event
。如果要支持旧版本的IE,请使用上面的跨浏览器代码。切勿单独使用“window.event”。

另外,在IE11,IE版本中尝试文档模拟模式,你从哪里听说的?你能提供说明这一点的资源吗?“据说是那个”-谁说的?你能指出任何官方文件吗?等等,我正在找到我读到的那个帖子。一些帖子说IE允许在不传递
事件的情况下访问window.event。你从哪里听说的?你能提供说明这一点的资源吗?“据说是那个”-谁说的?你能指出任何官方文件吗?等等,我正在找到我读到的那个帖子。有些帖子说IE允许访问window.event而不传递
event
。你的意思是说函数会混淆
troll
是事件还是
event
是事件?第一个参数始终是事件对象。因此,在上面的示例中,
troll
是实际的事件对象,
event
undefined
。即使某些浏览器公开