为什么onload事件不起作用?

时间:2015-07-20 18:19:16

标签: javascript jquery onload

这是我的代码:

$('.classname').on('click',function myfunc() {
  alert ('working ..!');
});

以上代码正常运行,当我点击div .classname时,它会给我一条消息:working ..!

现在我想对onload事件使用该函数(myfunc)。这是我的尝试:

window.onload = myfunc;
window.onload = myfunc();
document.onload = myfunc();
<body onload = "myfunc()">
object.onload=myfunc(){alert ('working ..!');}

但它们都不起作用。为什么?!为什么,当我刷新页面时看不到任何消息?我该如何解决?

3 个答案:

答案 0 :(得分:2)

total

您已使用函数表达式创建了命名函数。您已将其传递给$('.classname').on('click',function myfunc() { alert ('working ..!'); });

因为它是函数表达式,所以您不会在当前作用域中创建名为on()的变量。它只能从内部和myfunc函数中访问。

改为使用函数声明。

on

可以在MDN上找到关于function declarations and expressions的进一步阅读。

答案 1 :(得分:0)

该函数的范围不是全局的,因此您需要在click事件之外声明它。

答案 2 :(得分:0)

如何使用ready事件而不是加载?你可以在jquery文档中阅读:

  

.load()   将事件处理程序绑定到“加载”JavaScript事件。

     

。就绪()   指定在DOM完全加载时要执行的函数。

在我看来,完整的dom应该是完全加载的(即已经为滚动设置和计算的元素大小......)

function scroll() {
    alert('test');
     return false;
}

$('.link').on('click', scroll);
$(document).on('ready', scroll);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="link">manual test</a>

修改 回答初级职位。小心,我看到你在prop键和值<body onload = "myfunc()">之间放置空格你不能这样做。它应该是key=value

var myfunc = function() {
  alert ('working ..!');
}
<body onload="myfunc()">
  <a onclick="myfunc()">manual test</a>
</body>