Показать сообщение отдельно
  #1 (permalink)  
Старый 03.11.2010, 13:16
Аспирант
Отправить личное сообщение для decadent Посмотреть профиль Найти все сообщения от decadent
 
Регистрация: 15.09.2010
Сообщений: 30

Передача контекста через setTimeout
Не могу разобраться почему не передается контекст при вызове функции через setTimeout. На заголовки повешены события:

Первое плавно удаляет контейнер, если он есть
$("h3").bind("click", function() {
			if ($(".content").length) {
				$(".content").animate({width: '0'}, function () {
					$(this).remove();
				});
			}
		});

Второе вызывает функцию, где надо поменять местами заголовки. Если контейнер уже удален, то функция вызывается с правильным контекстом, то есть ей передается тот заголовок, на который я кликаю. А если контейнер, еще не удален, то через setTimeout в контексте ничего нет.
$("h3").bind("click", function() {
			if ( $(".content").length) {
				setTimeout(function () {moveObj.func.call($(this))}, 2000);
			}
			else {
				moveObj.func.call($(this));
			}
		});


когда func запускается через setTimeout, то this не тот, который нужен
moveObj = {
	func: function () {
		if ($(this).attr("id") == "main") {
		        $(this).animate({left: '200px'}, 1000, function() {
		               $(this).animate({top: '50px'}, 1000);
			});
          },
 и т.д.


В чем косяк? Я думал сначала что там передается объект контейнера, который я удаляю, но тогда $(this).attr("class") должно быть равно "content", а на деле "undefined". Короче, разъясните пожалуйста, а то совсем запутался.
Ответить с цитированием