Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Непонятные действия при отработке функции

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alnik-75
Отправлено: 23 Ноября, 2015 - 23:50:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




Уважаемые форумчане!
Нужен Ваш совет.
js функция удаления объявления:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. function delete_declar(id){
  4.         var pw=$('#delete_modal'),fm=$('#fon_modal'),wait=2900;
  5.         $(".ads_list:not(#ad_"+id+")").fadeTo(300,0.2);
  6.         objectAlignment(pw);
  7.         modalWindowFadeIn(pw,fm);
  8.         $('#button_yes').click(function(){
  9.                 modalWindowFadeOut(pw,fm);
  10.                 $.ajax({
  11.                         url:"/ajax-requests/deleteAds/",
  12.                         type:"POST",
  13.                         data:{id_ads:id},
  14.                         success:function(data){
  15.                                 if(data=="success"){
  16.                                         createInfoMessage("success","Объявление успешно удалено!",wait);
  17.                                         $("#ad_"+id).fadeOut(500).remove();
  18.                                         setTimeout(function(){
  19.                                 $(".ads_list:not(#ad_"+id+")").fadeTo(500,1);
  20.                                         },wait+300);
  21.                                 }
  22.                                 else{
  23.                                         $(".ads_list:not(#ad_"+id+")").fadeTo(300,1);
  24.                                         createInfoMessage("warning");
  25.                                 }
  26.                         },
  27.                         error:function(){
  28.                                 $(".ads_list:not(#ad_"+id+")").fadeTo(300,1);
  29.                                 createInfoMessage("warning");
  30.                         }
  31.                 });
  32.         });
  33.         $('#button_no').click(function(){
  34.                 $(".ads_list:not(#ad_"+id+")").fadeTo(300,1);
  35.                 modalWindowFadeOut(pw,fm);
  36.         });
  37. }
  38. // всплывающее информационное окно
  39. function createInfoMessage(tip,text,time){
  40.         text=text||'Произошла ошибка! Пожалуйста, перезагрузите страницу и повторите операцию';
  41.         time=time||4500;
  42.         var info_msg=$('#info_msg'),msg_text=$('#msg_text');
  43.         msg_text.text(text);
  44.         info_msg.css({'margin-top':-info_msg.height()/2,'width':screen.width,'opacity':0})
  45.                      .removeClass('display_none')
  46.                      .addClass('table info_'+tip)
  47.                      .animate({opacity:1},300,function(){
  48.                           info_msg.delay(time).animate({opacity:0},500,function(){
  49.                               info_msg.addClass('display_none').removeClass('table info_'+tip);
  50.                               msg_text.text('');
  51.                          });
  52.                     });
  53. }
  54.  


Кратко о работе. Аяксом отправляется id объявления в обработчик.
При успешной обработке объявление исчезает и появляется инфо окно - функция createInfoMessage. Она принимает три параметра (тип уведомления, текст и время показа.
Тип определяет цвет фона окошка (success, warning). Вот эта строка, в которой инфоокну добавляется класс (info_success или info_warning) (4 СТРОКА)
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. info_msg.css({'margin-top':-info_msg.height()/2,'width':screen.width,'opacity':0})
  3.                      .removeClass('display_none')
  4.                      .addClass('table info_'+tip)
  5.                      .animate({opacity:1},300,function(){
  6.                           info_msg.delay(time).animate({opacity:0},500,function(){
  7.                               info_msg.addClass('display_none').removeClass('table info_'+tip);
  8.                               msg_text.text('');
  9.                          });
  10.                     });
  11.  


После скрытия окна класс и текст удаляются.
Проблема. При удалении первого объявления инфоокно правильное (передается success) и, соответственно, добавляется правильный класс info_success. При следующем удалении уже добавляются два класса info_success и info_warning.

СПРАШИВАЕТСЯ - КАКОГО ЧЕРТА?

зАРАНЕЕ, СПАСИБО

(Отредактировано автором: 24 Ноября, 2015 - 00:01:01)

 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2015 - 03:11:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




При ресете попапа удаляй весь список классов, т.к. ты же не знаешь какой из них был установлен ранее.
Ну или записывай в св-во или в атрибут или в дату имя класса который устанавливался ранее.
Или вместо классов сделай кастомный атрибут типа:
CODE (html):
скопировать код в буфер обмена
  1. <div class="popup-message"
  2.      data-popup-type="foo"></div>

CODE (css):
скопировать код в буфер обмена
  1. .popup-message[data-popup-type="foo"] {
  2.     background: #ff0000;
  3. }
 
 Top
alnik-75
Отправлено: 24 Ноября, 2015 - 09:50:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




в том и тело после отработки все классы приводятся в исходное положение
CODE (javascript):
скопировать код в буфер обмена
  1.  info_msg.addClass('display_none').removeClass('table info_'+tip);
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2015 - 10:10:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




А я говорю про "перед показом".
Еще не забудь предыдущий таймер сбросить.
Там же асинхронка.
 
 Top
alnik-75
Отправлено: 24 Ноября, 2015 - 11:03:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




DeepVarvar пишет:
А я говорю про "перед показом".
Еще не забудь предыдущий таймер сбросить.
Там же асинхронка.

весь прикол заключается в том, что во всех опеисанных случаях должен активироваться класс info_success. Откуда берется info_warning неизвестно
 
 Top
andrewkard
Отправлено: 24 Ноября, 2015 - 11:43:45
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




alnik-75 пишет:
При следующем удалении уже добавляются два класса info_success и info_warning.

сколько запросов уходит в данном случае?
 
 Top
alnik-75
Отправлено: 24 Ноября, 2015 - 16:11:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




andrewkard пишет:
alnik-75 пишет:
При следующем удалении уже добавляются два класса info_success и info_warning.

сколько запросов уходит в данном случае?

как бы один. Я тоже про это думал. Класс info_warning добавляется при возникшей ошибке, т.е. можно предположить, что имели место два запроса. При втором запросе объявления уже нет, т.к. оно было удалено при первом и поэтому выдает ошибку, но дело в том, что текст инфосообщения такой, который должен быть при удачном удалении
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2015 - 16:53:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




alnik-75 пишет:
Откуда берется info_warning неизвестно
Дядь, ты же знаешь что в 99% случаев причина проблемы сидит напротив монитора.
Дебаж его.
Перепиши наново.
 
 Top
alnik-75
Отправлено: 24 Ноября, 2015 - 19:40:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




да, запрос отправляется дважды.

У меня такое ощущение, что это происходит из-за того, что внутри функции стоит обработчик события click на кнопку подтверждения удаления
(Добавление)
alnik-75 пишет:
да, запрос отправляется дважды.

У меня такое ощущение, что это происходит из-за того, что внутри функции стоит обработчик события click на кнопку подтверждения удаления

поменял :
CODE (javascript):
скопировать код в буфер обмена
  1.  $('#button_yes').click(function(){

на
CODE (javascript):
скопировать код в буфер обмена
  1. $('#button_yes').one('click',function(){

и все наладилось
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB