为什么jQuery事件在外部就绪函数时没有触发,即使在文档准备好之后呢?

时间:2017-01-15 19:29:43

标签: javascript jquery document-ready

为什么点击事件在这种情况下不会触发,虽然DOM似乎已加载('准​​备好'在控制台中显示)?

$(document).ready(function() {
    console.log("ready!");
});

$("p").click(function() {
    alert("You clicked on paragraph.");
});

我的理解是,因为点击事件的代码是在文档就绪函数正确执行之后,它应该可以工作,但它不会。只有在就绪函数中的花括号之间包含事件时,它才有效。

3 个答案:

答案 0 :(得分:3)

$(document).ready是异步的。您正在向它传递一个回调函数,以便它记录DOM准备就绪的事实。但是,click绑定代码在您设置ready处理程序后立即执行,而不是在回调执行时执行。

您只需要确保将绑定逻辑放在ready处理程序中。

答案 1 :(得分:1)

您可以将代码直接放在$(document).ready()函数中,也可以在DOM准备就绪时创建一个绑定点击的新功能。



    $(document).ready(function() {
        bindClickEvent();
    });

    function bindClickEvent() {
       $("p").click(function() {
           alert("You clicked on paragraph.");
       });
    }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

<p>Click me!</p>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

如果您希望在&#34; ready&#34;中执行该代码。事件,把它移到那里。

$(document).ready(function() {
    console.log("ready!");

    $("p").click(function() {
        alert("You clicked on paragraph.");
    });
});

您现在定义它的方式并不意味着它在加载DOM时执行。