Функция готовности jQuery

Являются ли конечные результаты следующих фрагментов jQuery одинаковыми?

Фрагмент 1:

$(function() { alert('test!'); });

Фрагмент 2:

$(document).ready(function() { alert('test!'); });

Другими словами, $(function(){}) просто сокращается для $(document).ready(function() { });?

Я спрашиваю, потому что мы видим некоторые странные проблемы с небольшим приложением, которое мы создали с помощью jQuery и jQuery UI. Иногда при выполнении формы отправьте действие, нажав кнопку, окно браузера просто замерзнет. Мы все еще можем использовать базовое окно браузера (тот, который запускает всплывающее окно), пока мы не выполним некоторые действия. Пользователи могут продолжать только принудительно закрывая браузер (Internet Explorer, очевидно). Мы подозреваем, что это связано с плагином Acrobat PDF, но я просто проверяю все углы здесь, потому что нашел эту проблему, которая, похоже, демонстрирует подобное поведение.

Ответ 1

Да, они эквивалентны. См. Эту ссылку для справки .ready()

Ответ 2

Все три следующих синтаксиса эквивалентны:

$(document).ready(handler)
$().ready(handler) (this is not recommended)
$(handler)

Слияние пространства имен jQuery

При использовании другой библиотеки JavaScript нам может потребоваться вызвать $.noConflict(), чтобы избежать проблем с пространством имен. Когда эта функция вызывается, ярлык $больше не доступен, заставляя нас писать jQuery каждый раз, когда мы обычно пишем $. Однако обработчик, переданный методу .ready(), может принимать аргумент, которому передается глобальный объект jQuery. Это означает, что мы можем переименовать объект в контексте нашего обработчика .ready(), не затрагивая другой код:

jQuery(document).ready(function($) {
  // Code using $ as usual goes here.
});

Ответ 3

$(function(){}) и $(document).ready(function() { }) идентичны.

Ответ 4

Да, это идентично. но первый из них обычно используется в jquery для удобства.

$(function() { 
    alert('test!'); 
});

Ответ 5

Следующий код также работает

$(document).ready(function(){
    alert("success");
});

ИЛИ

$(function(){
    alert("succes");
});

Ответ 6

Да:

$(document).ready(function() { 
  /* code */
});

... и:

$(function() { 
  /* code */
});

... фактически одинаковы, и последнее обычно называют сокращением для первого.

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

Конструктор задокументирован в api.jquery.com/jquery/, и два его соответствующих варианта описаны ниже.


jQuery( selector [, context ] )

Принимает строку, содержащую селектор CSS, который затем используется для соответствия набору элементов.

Возвращает объект jQuery.

Этот параметр выше, как вы вызываете конструктор jQuery при записи:

$(document).ready(function() { /* code */ });

Объект document выбран и используется для создания объекта jQuery. Когда DOM полностью загружен, этот объект jQuery вызывает обратный вызов (анонимная функция) в ready().


jQuery( callback )

Привязывает функцию, выполняемую при завершении загрузки DOM.

Возвращает объект jQuery.

Этот параметр выше, как вы вызываете конструктор jQuery при записи:

$(function() { /* code */ });

Функция обратного вызова (анонимная функция) используется для создания объекта jQuery, а когда DOM полностью загружен, он вызывается.