Нужно нажать дважды, прежде чем будет запущен jquery animate

#jquery

#jquery

Вопрос:

У меня есть код, в котором я загружаю данные из php-запроса через jquery. Я хочу, чтобы он загрузил данные и анимировал div, открытый для автоматического изменения высоты.

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

Я пытался решить эту проблему, но, похоже, не могу найти решение, поэтому я прошу немного помочь в этом. Мне действительно нужна функция загрузки для события щелчка. Потому что он проходит через переменные, которые я использую в своем php-запросе.

Вот код jQuery, который я использовал:

 $(document).ready(function(){ $(".orderBlok").click(function(){  var order = $(this).find('.orderBlokNummer').text();  var dat = $('#datumSelector').val();  $('#orderSelector').val(order);  $("#"   order).load("bonselect.php", {  dezeOrder: order,  datumVandaag: dat  });  var open = $(this).find('.orderBlokBonGedeelte'),  animateTime = 500;  if(open.height() == 0){  autoHeightAnimate(open, animateTime);  } else {  open.stop().animate({ height: '0' }, animateTime);  } });  function autoHeightAnimate(element, time){  var curHeight = element.height(), // Get Default Height  autoHeight = element.css('height', 'auto').height(); // Get Auto Height  element.height(curHeight); // Reset to Default Height  element.stop().animate({ height: autoHeight }, time); // Animate to Auto Height }  

});

Любая помощь будет признательна!

Ответ №1:

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

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

Попробуйте что-нибудь вроде этого

 $(document).ready(function(){  $(".orderBlok").click(function(){  var order = $(this).find('.orderBlokNummer').text();  var dat = $('#datumSelector').val();  var clicked_element = $(this);  $('#orderSelector').val(order);  $("#"   order).load("bonselect.php", {  dezeOrder: order,  datumVandaag: dat  }, function() {    openAnimation(clicked_element);    });  });   });      function openAnimation(clicked_element) {  var open = clicked_element.find('.orderBlokBonGedeelte'),  animateTime = 500;  if(open.height() == 0){  autoHeightAnimate(open, animateTime);  } else {  open.stop().animate({ height: '0' }, animateTime);  }  });  }    function autoHeightAnimate(element, time){  var curHeight = element.height(), // Get Default Height  autoHeight = element.css('height', 'auto').height(); // Get Auto Height  element.height(curHeight); // Reset to Default Height  element.stop().animate({ height: autoHeight }, time); // Animate to Auto Height  }  

Комментарии:

1. Работает как заклинание, с удалением a ) и a } над последней функцией. Большое Вам спасибо!