为什么.bind()不能在.ready()函数之外工作?

时间:2013-02-22 16:48:55

标签: jquery

点击按钮,我显示一条警告信息。以下是我正在使用的代码。

<script type="text/javascript">
// $(document).ready(function(){
    $("#clickHere").bind("click",function(){
        alert('clicked');
     });
 //});
 </script>

当.ready()行被注释时,当我点击按钮时不会抛出警报消息,但如果我取消注释这些行,则抛出警报。不应该在两种情况下都显示警报消息,因为我已经在“点击”事件上添加了对按钮的绑定吗?

6 个答案:

答案 0 :(得分:6)

因为在解析javascript块时,DOM尚未就绪,因此您引用的元素尚不存在。

答案 1 :(得分:3)

这是因为.ready()函数是一个jquery回调快捷方式,只有在DOM(html)加载到浏览器后才会触发。如果你将函数绑定到ready之外,那么DOM元素很可能还没有被加载,因此无法正确绑定。

您可以尝试将您的脚本移动到文档的底部,就在关闭正文标记之前,这会导致它在您的其他DOM元素之后加载,但作为标准练习,我通常不会绑定DOM元素直到DOM已加载。

答案 2 :(得分:1)

DOM需要准备好被JavaScript操纵才能应用项目。

Try reading the documentation as to why it is necessary.

答案 3 :(得分:1)

除非已经在DOM中创建了按钮。如果您的代码位于页面的头部,则不会发生这种情况,但如果它在关闭的正文标记之前就没问题了。

答案 4 :(得分:1)

为了实现在DOM未准备好解析时在元素上设置事件处理程序的功能,我相信你可以使用'on'方法,你可以“为一个或多个事件附加一个事件处理函数现在和未来的元素“。

http://api.jquery.com/on/

答案 5 :(得分:0)

从一个非常宽松的意义上来说,想象$('document')。ready()就像你想到其他编程语言中的Main()方法一样。