Почему событие jQuery не запускается, когда вне функции готовности, даже после того, как документ готов?

Почему в этом случае событие click не срабатывает, хотя DOM, кажется, загружен (в консоли отображается "готово")?

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

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

Я понимаю, что, поскольку код для события click находится после того, как функция готовности документа выполнена правильно, она должна работать, но это не так. Это будет работать только тогда, когда событие включено в фигурные скобки в функции готовности.

3 ответа

Решение

$(document).ready асинхронный Вы передаете ему функцию обратного вызова, чтобы она регистрировала факт готовности DOM. Тем не менее click код привязки выполняется сразу после установки ready обработчик, а не при выполнении обратного вызова.

Вам просто нужно убедиться, что вы поместили обязательную логику в ready обработчик.

Вы можете разместить код прямо в $(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>

Если вы хотите, чтобы этот код выполнялся в событии "ready", просто переместите его туда.

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

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

То, как вы его определили прямо сейчас, не означает, что оно выполняется при загрузке DOM.

Другие вопросы по тегам