Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает функция (https://javascript.ru/forum/misc/20629-ne-rabotaet-funkciya.html)

(Sandr) 11.08.2011 17:46

Не работает функция
 
Есть функция с таким кодом
function myf() {
	$.ajax({
		type: "POST",
		url: "config.php",
		data: {данные},
		success: function(html)	{
				$("#res").html(html);
				document.getElementById('res').style.display = 'block'; //по умолчанию #res скрыт
				setTimeout(function() {
					document.getElementById('res').style.display = 'none'; 
					clear('res');
					config('open_conf','.articleContent');
					$('#smiles').animate({height: 'show'}, 200); // эта часть не работает
				},1000);
			}
	});
return false;
}


Все функции работают, кроме метода .animate().
Но если перед ним поставить alert('text') , то после скрытия алерта пользователем метод .animate() выполняется.
Подскажите, в чём проблема?

(Sandr) 11.08.2011 17:49

Забыл написать...
Функция clear() очищает нужный див
А config() загружает данные, в том числе и элемент с id='smiles'

ваый 11.08.2011 17:51

Ну очевидно же. Все тоже самое: делать манипуляции после того, как #smiles появится на странице, по есть засунуть animate в функцию обратного вызова.

devote 11.08.2011 17:52

очищать див можно так:
$("#mydiv").empty();

(Sandr) 11.08.2011 18:30

ваый,
У меня так и сделано.
config('open_conf','.articleContent'); // загружает #smiles
$('#smiles').animate({height: 'show'}, 200); // показывает #smiles


"по есть засунуть animate в функцию обратного вызова.", можно по подробнее?

(Sandr) 11.08.2011 18:31

devote,
я знаю. Просто, хочу как можно меньше использовать jQuery.

devote 11.08.2011 18:49

Цитата:

Сообщение от (Sandr)
по есть засунуть animate в функцию обратного вызова.", можно по подробнее?

листинг функции config сюда выклади

ваый 11.08.2011 18:57

Цитата:

Сообщение от (Sandr)
У меня так и сделано.

У тебя не так сделано. У тебя сначала что-то происходит в config, и следом animate. Поэтому если у тебя есть что-то асинхронное в config, то animate не будет работать, потому что начинает выполняться не дожидаясь окончания работы config.

(Sandr) 11.08.2011 18:58

devote,
function config(sel, div)
{
	var eDoc = document.getElementById('res_adm');
	if(sel == 'open_conf')	{
		$.ajax({
				type: "POST",
				url: "config.php",
				data: {select: "open_conf"},
				success: function(html) {
							$(div).html(html);
							if(document.getElementById('rating').innerHTML == '1')	{
								confBoolean('yes', 'rating', 'rating_yes_article', 'rating_no_article');
							}
							else {
								confBoolean('no', 'rating', 'rating_yes_article', 'rating_no_article');
							}
						}
			});
		return false;
	}


/////дальше код не относящийся к данной проблеме ///////////

}

devote 11.08.2011 19:01

function config(sel, div, callback)
{
    var eDoc = document.getElementById('res_adm');
    if(sel == 'open_conf')  {
        $.ajax({
                type: "POST",
                url: "config.php",
                data: {select: "open_conf"},
                success: function(html) {
                            $(div).html(html);
                            if(document.getElementById('rating').innerHTML == '1')  {
                                confBoolean('yes', 'rating', 'rating_yes_article', 'rating_no_article');
                            }
                            else {
                                confBoolean('no', 'rating', 'rating_yes_article', 'rating_no_article');
                            }
                },
                complete: function() {
                    callback();
                }
           });
        return false;
    }
 
 
/////дальше код не относящийся к данной проблеме ///////////
 
}




config('open_conf','.articleContent', function(){
     $('#smiles').animate({height: 'show'}, 200);
});


Часовой пояс GMT +3, время: 06:09.