Когда я должен использовать документ jQuery.готовая функция?



мне сказали использовать документ.готов, когда я впервые начал использовать Javascript/jQuery, но я никогда не узнал, почему.



может ли кто-нибудь предоставить некоторые основные рекомендации о том, когда имеет смысл обернуть код javascript/jquery внутри jQuery document.ready?



некоторые темы, которые меня интересуют:




  1. jQuery .on() метод: я использую .on() метод для AJAX совсем немного (обычно на динамически создаваемых элементах DOM). Должен ли .on() щелкните обработчики всегда быть внутриdocument.ready?

  2. производительность: это более эффективно, чтобы сохранить различные объекты javascript/jQuery внутри или за пределами документ.готов (кроме того, является ли разница в производительности значительной?)?

  3. область объекта: AJAX-загруженные страницы не могут получить доступ к объектам, которые были внутри документ предыдущей страницы.готов, правильно? Они могут получить доступ только к объектам, которые были за пределами документ.готовы (т. е. действительно "глобальные" объекты)?


обновление: чтобы следовать лучшей практике, весь мой javascript (библиотека jQuery и код моего приложения) находится в дно моей HTML-страницы, и я использую defer атрибут на jQuery-содержащих скриптах на моих AJAX-загруженных страницах, чтобы я мог получить доступ к библиотеке jQuery на этих страницах.

681   8  

8 ответов:

простыми словами,

$(document).ready есть событие, которое срабатывает, когда document is готовый.

предположим, что вы разместили свой код jQuery в и пытается получить доступ к dom элемент (якорь, IMG и т. д.), Вы не сможете открыть его, потому что html интерпретируется сверху вниз, и ваши html-элементы отсутствуют при запуске кода jQuery.

для того чтобы отжать эту проблему, мы устанавливаем каждое jQuery / javascript код (который использует DOM) внутри $(document).ready функция, которая вызывается, когда все dom элементы могут быть доступны.

и это причина, когда вы размещаете свой код jQuery внизу (после всех элементов dom, непосредственно перед </body>),в этом нет необходимости $(document).ready

нет необходимости размещать on внутри $(document).ready только при использовании on метод on document по той же причине, что я объяснил выше.

    //No need to put inside $(document).ready
    $(document).on('click','a',function () {
    })

    // Need to put inside $(document).ready if placed inside <head></head>
    $('.container').on('click','a',function () {
    });

EDIT

из комментариев

  1. $(document).ready не ждет изображений или скриптов. Вот в чем большая разница между $(document).ready и $(document).load

  2. только код, который обращается к DOM должен быть готов обработчик. Если это плагин, он не должен быть в готовом событии.

ответы:

jQuery .on () метод: я использую .on () метод для AJAX совсем немного (динамическое создание элементов DOM). Должно быть .on () обработчики щелчков всегда быть внутри документа.готов?

нет, не всегда. Если вы загружаете свой JS в head документа вам потребуется. Если вы создаете элементы после загрузки страницы через AJAX, вам необходимо. Вам не нужно будет, если скрипт находится ниже элемента html, который вы добавляете обработчик тоже.

производительность: это более эффективно, чтобы сохранить различные javascript/jQuery объекты внутри или вне документа.готов (кроме того, является ли разница в производительности значительной?)?

Это зависит. Это займет столько же времени, чтобы прикрепить обработчики, это просто зависит от того, хотите ли вы, чтобы это произошло немедленно, когда страница загружается, или если вы хотите, чтобы она ждала, пока не будет загружен весь документ. Так это будет зависеть от того, что другие вещи, которые вы делаете на страница.

область объекта: AJAX-загруженные страницы не могут получить доступ к объектам, которые были внутри документ предыдущей страницы.готов, правильно? Они могут получить доступ только к объектам которые были вне документа.готовы (т. е. действительно "глобальные" объекты)?

это, по сути, его собственная функция, поэтому он может получить доступ только к vars, объявленным в глобальной области (вне / над всеми функциями) или с window.myvarname = '';

прежде чем вы сможете безопасно использовать jQuery, вам нужно убедиться, что страница находится в состоянии, в котором она готов манипулировать. С помощью jQuery мы достигаем этого, помещая наш код в функцию, а затем передавая эту функцию в $(document).ready(). Функция, которую мы передаем, может быть просто анонимная функция.

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

это будет запускать функцию, которую мы передаем .ready() как только документ будет готов. Что здесь происходит? Мы используем $(документ) создайте объект jQuery из документа нашей страницы, а затем вызовите его .готовая() функция на этом объекте, передавая ему функцию, которую мы хотим выполнить.

поскольку это то, что вы будете делать много, есть сокращенный метод для этого, если вы предпочитаете - функция $() выполняет двойную обязанность в качестве псевдонима для $(document).ready() если вы передадите ему функцию:

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

Это хорошее чтение: Основы Jquery

.готов() - укажите функцию для выполнения при полной загрузке DOM.

$(document).ready(function() {
  // Handler for .ready() called.
});

вот список все методы jQuery

Читать далее вводим $(документ).готов()

быть реалистом, document.ready не требуется ни для чего другого, кроме точного манипулирования DOM, и это не всегда нужно или лучший вариант. Я имею в виду, что когда вы разрабатываете большой плагин jQuery, например, вы вряд ли используете его во всем коде, потому что вы пытаетесь сохранить его сухим, поэтому вы абстрагируетесь как можно больше в методах, которые управляют DOM, но предназначены для последующего вызова. Когда весь ваш код тесно интегрирован единственный метод, представленный в document.ready обычно init где происходит вся магия DOM. Надеюсь, это ответ на ваш вопрос.

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

но, вы должны создать функции для всех действиях и вызывать их из документа.готовый. При создании функций (глобальных объектов) вызывайте их в любое время. Поэтому, как только ваши новые данные будут загружены и созданы новые элементы, снова вызовите эти функции.

эти функции являются те, где вы связали события и действия предметы.

$(document).ready(function(){
bindelement1();
bindelement2();
});

function bindelement1(){
$('el1').on('click',function...);
//you might make an ajax call here, then under complete of the AJAX, call this function or any other function again
}

function bindelement2(){
$('el2').on('click',function...);
}

я добавил ссылку на div и хотел сделать некоторые задачи по щелчку. Я добавил код ниже добавленного элемента в DOM, но он не работал. Вот код:

<div id="advance-search">
   Some other DOM elements
   <!-- Here I wanted to apppend the link as <a href="javascript:;" id="reset-adv-srch"><span class="bold">x</span> Clear all</a>-->
</div>

<script>
  $("#advance-search #reset-adv-srch").on("click", function (){
     alert('Link Clicked');``
  });
</script>

это не сработало. Затем я поместил код jQuery внутри $(document).готов и он работал отлично. Вот оно.

$(document).ready(function(e) {
    $("#advance-search #reset-adv-srch").on("click", function (){
        alert('Link Clicked');
    });
});

Он готов событие происходит, когда DOM (объектной модели документа) был загружен.

поскольку это событие происходит после того, как документ готов, это хорошее место, чтобы иметь все другие события и функции jQuery. Как в примере выше.

метод ready () определяет, что происходит, когда происходит событие ready.

Совет: метод ready() не следует использовать вместе с ним .

Comments

    Ничего не найдено.