Что определяет порядок выполнения методов в цепочках jQuery?

Я писал об этом очень давно. В основном используя частичные классы и немного усилий (автоматических или ручных, в зависимости от того, как часто вы собираетесь менять веб-службу), вы можете заставить прокси-класс веб-службы реализовать интерфейс. Затем вы можете издеваться как обычно.

10
задан Justin Johnson 21 October 2009 в 00:52
поделиться

7 ответов

Если вы хотите дождаться завершения каждой анимации перед выполнением следующего шага, используйте обратные вызовы анимации, подробно описанные в документации :

$('#bar').click(function () {
  $('#foo p').hide('slow', function(){
    $(this).appendTo('#bar').show('slow');
  });
});
3
ответ дан 3 December 2019 в 20:42
поделиться

Ожидаемый результат правильный. Наблюдаемое поведение может быть результатом hide («медленно»), который выполняется асинхронно . Таким образом, он выполняется, пока выполняется следующее действие. Таким образом, создается впечатление, что сначала к #bar добавляется p. Вы можете попробовать hide () без замедления, чтобы увидеть, имеет ли это значение.

4
ответ дан 3 December 2019 в 20:42
поделиться

show () и hide () на самом деле являются эффектами анимации, но когда не передаются аргументы, они используют «мгновенную» продолжительность. Однако из-за того, что они реализованы как анимации, это означает, что они не выполняются синхронно с цепочкой функций. Таким образом, вам действительно следует использовать обратный вызов от вызова hide () для запуска функции обратного вызова, которая вызывает append () , а затем show () .

http://docs.jquery.com/Effects/show

http://docs.jquery.com/Effects/hide

1
ответ дан 3 December 2019 в 20:42
поделиться

Чтобы обеспечить выполнение что-то ПОСЛЕ эффекта, такого как скрыть или показать, используйте обратный вызов. http://docs.jquery.com/Effects/show#speedcallback

Для добавления:

Винсент прав, выполнение на самом деле

  1. начало скрытия элемента p в #foo (МЕДЛЕННО)
  2. добавить p к #bar (мгновенно)
  3. начать показ p, который теперь является дочерним элементом #bar (МЕДЛЕННО)

То, что вы видели, было результатом эффекта

  1. append p to #bar (выполнено)
  2. скрыть элемент p в #foo (ВЫПОЛНЕНО)
  3. показать p, который теперь является дочерним элементом #bar (ВЫПОЛНЕНО)
8
ответ дан 3 December 2019 в 20:42
поделиться

Вполне уверен, что он выполняется в том порядке, в котором вы его вызываете, вероятно, запускает часть скрытия и через долю секунды добавляется к этому другому элементу, но часть анимации уже началась, это занимает больше времени, чем на миллисекунду, потому что вы устанавливаете его на «медленный», и он перескакивает в непрозрачности от 1 до 0, например, от 1 до 0,9 до 0,8 в миллисекундах.

$.fn.hide = function() { alert('hiding'); return this; };
$.fn.appendTo = function() { alert('appending To') }
$('body').hide().appendTo('html')
1
ответ дан 3 December 2019 в 20:42
поделиться

You have to use callback if you want to queue the other methods run after the show hide thing like "Sixten Otto" has said. The animation of show hide will not wait for append method to execute. It starts a separate thread with setInterval while in the meantime, other code is invoked. So the result you got is not unexpected.

0
ответ дан 3 December 2019 в 20:42
поделиться

Скрытие асинхронно. Если вы хотите дождаться его завершения, вам нужно поместить весь код, который вы хотите запустить после него, в функцию обратного вызова, которую вы передаете для скрытия в качестве параметра.

1
ответ дан 3 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: