Javascript 两个事件处理程序分配之间的差异
假设我们有一个包含一个脚本的简单html页面:Javascript 两个事件处理程序分配之间的差异,javascript,Javascript,假设我们有一个包含一个脚本的简单html页面: <html> <script type="text/javascript"> window.onpopstate=function(event) { alert("hi"); } </script> <body > <h1> Hi, 2 </h1> <a href="h3.htm">next</a> </body> &l
<html>
<script type="text/javascript">
window.onpopstate=function(event)
{ alert("hi"); }
</script>
<body >
<h1> Hi, 2 </h1>
<a href="h3.htm">next</a>
</body>
</html>
window.onpopstate=函数(事件)
{alert(“hi”);}
嗨,2
它不工作(我在Chrome和FF下尝试过)。但是当我编写脚本代码时
<script type="text/javascript">
function pp(event) { alert("hi"); }
window.onpopstate=pp()
</script>
函数pp(事件){alert(“hi”);}
window.onpopstate=pp()
它起作用了!对我来说,这两段代码只是在函数定义上有所不同,但在实践中并不相同
顺便说一句,即使触发onpopstate事件,事件也未定义。这对我来说是一件更不清楚的事情。谢谢你的帮助。正如@Sampson所说。。他们不一样 在第二个示例中,
window.onpopstate
正在填充执行pp
的结果。在本例中,此函数返回undefined,因此窗口。在此之后,onpopstate
是未定义的。当然,您会看到警报
,但是窗口。onpopstate
是未定义的
在第一个示例中,window.onpopstate
由函数本身填充,这是实际需要的。如果您看到,onpopstate
需要一个funcRef
,这正是您作为参数传入的内容
底线:在第二个示例中,您会看到
警报
,因为您正在调用函数,但第一个是正确的。为了实际查看被触发的onpopstate
,您应该将其添加到浏览器历史记录中,但这是另一个故事…首先在第二个代码片段中,您有函数调用pp()
,您可能需要窗口。onpopstate=pp
其次,当您手动执行
history.pushState({page:1},“title 1”,“page=1”)时,它会起作用
然后history.back()代码>或只需单击“上一步”按钮。不知道为什么单击链接不会在历史记录中添加条目。第二个示例立即执行pp
,试图将返回值(本例中未定义)分配给窗口。onpopstate
。两者都不使用,目标。addEventListener(类型,处理程序)
是您的目标friend@Sampson,现在对我来说更清楚了,谢谢@保罗S,谢谢你,我明天会试着做:)是的,关于“另一个故事”你是对的-从我的角度看,看起来我是一个小哈比人,但现在我正处在一个重大事件的中心:)