Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2011, 10:58   #1
BloodA
 
Регистрация: 07.09.2008
Сообщений: 9
По умолчанию Скрипт срабатывает один раз, а далее ошибка

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

Код HTML:
img = $("."+id+"").children(".photo").children("img"); // получаем оригинал картинки
img_clone = img.clone(); // клонируем объект картинку
$(".item."+id).children(".photo").append(img_clone); // вставляем клон в документ


var to_compare_link_coords = $("#to_compare_link").offset(); // получаем координаты ссылки к сравнению
to_compare_link_coords.left = to_compare_link_coords.left.toFixed(0);
to_compare_link_coords.top = to_compare_link_coords.top.toFixed(0);

var img_clone_coords = img.offset(); // получаем координаты клона
//alert(img_clone_coords==null);
alert("123: " + img.offsetParent.x);
if(img_clone_coords==null){
	img_clone_coords = {left:img.offset().left, top: img.offsetTop}
}
img_clone_coords.left = img_clone_coords.left.toFixed(0);
img_clone_coords.top = img_clone_coords.top.toFixed(0);

var doc_scrol_x = $(document).scrollLeft(); //координаты скрола Х
var doc_scrol_y = $(document).scrollTop();  //координаты скрола Y
var win_width_w = $(window).width();   //Ширина окна
var win_height_h = $(window).height(); //Высота окна
var coords_to_anim = Array(to_compare_link_coords.left-img_clone_coords.left+50, to_compare_link_coords.top-img_clone_coords.top+150)

img_clone.addClass("anim_photo");
img_clone.css({top:'0', display: "block", position:"absolute", border:"0px solid red", "z-index": "999"});
img_clone.animate({left: coords_to_anim[0], top:coords_to_anim[1], width: "10%", height: "10%"}, "fast", function(){
	img_clone.remove(); 
	delete (img_clone_coords, img_clone, img, doc_scrol_x, doc_scrol_y, win_width_w, win_height_h, coords_to_anim);
});
init_compare_del();
init_clear_compare();
но код срабатывает один раз а потом пишет ошибку:
Код:
img.offset() is null
http://simkaupdate.no-ip.biz/js/template.js
Line 43
BloodA вне форума Ответить с цитированием
Старый 20.07.2011, 12:02   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Попробуйте не удалять в конце img
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 20.07.2011, 12:14   #3
BloodA
 
Регистрация: 07.09.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Naive Посмотреть сообщение
Попробуйте не удалять в конце img
Эти удаления это уже танцы с бубном... добавил когда уже не знал что делать...
BloodA вне форума Ответить с цитированием
Старый 20.07.2011, 12:17   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

После просмотра (или добавления в список, х/з) "item xxxx" появляется в #footer_block_content и img = $("."+id+"").children(".photo") возвращает не 1 блок, а массив из 2.
пыщь
JTG вне форума Ответить с цитированием
Старый 20.07.2011, 12:38   #5
BloodA
 
Регистрация: 07.09.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
После просмотра (или добавления в список, х/з) "item xxxx" появляется в #footer_block_content и img = $("."+id+"").children(".photo") возвращает не 1 блок, а массив из 2.
Всё было бы верно, но у меня отлавливается случай если фото уже есть в #footer_block_content, тогда просто выводится сообщение...
BloodA вне форума Ответить с цитированием
Старый 20.07.2011, 13:01   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Проще сделать removeClass(id) при помещении товара в список, чем городить кучу проверок с неочевидным порядком вызова.

--

А, вы так и сделали уже
пыщь

Последний раз редактировалось JTG; 20.07.2011 в 13:03.
JTG вне форума Ответить с цитированием
Старый 20.07.2011, 14:40   #7
BloodA
 
Регистрация: 07.09.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Проще сделать removeClass(id) при помещении товара в список, чем городить кучу проверок с неочевидным порядком вызова.

--

А, вы так и сделали уже
Я не могу так сделать потому что при удалении товара из корзины надо вернуть возможность добовления его в корзину, т.е. вернуть ссылку на скрипт добовления... вот, а делаю это я получив $("."+id).
BloodA вне форума Ответить с цитированием
Старый 20.07.2011, 15:15   #8
BloodA
 
Регистрация: 07.09.2008
Сообщений: 9
По умолчанию

сделал
Код:
alert(img.length);
в первый раз выводит '1' а во второй 0... такое ощущение будто объек удалился, хотя я удалял только клон...
BloodA вне форума Ответить с цитированием
Старый 20.07.2011, 16:02   #9
BloodA
 
Регистрация: 07.09.2008
Сообщений: 9
По умолчанию

Всё народ спасибо за помощь! Я нашёл свой косяк! Переменную id я получал получив строку с именем класс и отрезав последовании 4 символа, а так как при нажатии на кнопку 'в карзину' у меня добавлялся класс activ то id получался 'tive' и поэтому объект $('.'+id) не нахоился и метод offset() от пустого объекта не работал... Всем большое спасибо извините за недоразумение...
BloodA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт выполняется только один раз MAKSA JavaScript, Ajax 6 12.02.2010 13:48
Непонятная ошибка (код срабатывает только один раз) Marsel737 Общие вопросы Delphi 4 10.02.2010 16:37
Графическая функция второй раз не срабатывает... AlexFox PHP 2 13.09.2009 17:27
Форма один раз Dop Общие вопросы Delphi 11 16.07.2009 21:41
timer срабатывает только один раз! KWN, lnc Общие вопросы Delphi 1 05.03.2009 12:58