Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   не работает повторно скрипт (https://javascript.ru/forum/jquery/28196-ne-rabotaet-povtorno-skript.html)

brussens 10.05.2012 22:32

не работает повторно скрипт
 
Доброго времени суток, уважаемые форумчане) При работе с Jquery появилась проблема на последнем этапе создание древовидной системы комментариев. Вобщем комментарий добавляется прекрасно, но вот при попытке добавления второго комментария без перезагрузки при добавлении первого скрипт как будто отключается. Подскажите пожалуйста, в чём может быть проблема? Заранее спасибо)

atlantis 11.05.2012 00:02

Тут экстрасенсов нет.
Код в студию.

brussens 13.05.2012 01:55

$(function (){ 
  	
      /* Объект sendDataComment будет содержать данные для отправки на сервер
         commentForm - переменная, в которую будет помещен клон формы         */

      var sendDataComment = {}; 
      var commentForm;
	  var commentnew = {};
	  var commentid = {};
// Функция создает форму для ответа путем клонирования нашей спрятанной формы
      function CommentForm()
      {
      	if(commentForm) 
	{
          // Проверяем существования клона. Если он уже создан, то удаляем его, а затем создаем новый.
		  $('.companel').css('display', 'block');
            removeCommentForm();			
          } 
          commentForm = $('#newComment').clone();
      }
      
      // Функция удаления клона 
      function removeCommentForm()
      {
         commentForm.fadeOut(500);
         sendDataComment = {};
      }
      
      
      /* На событие клика по кнопке "Добавить комментарий/Ответить" вешаем необходимые действия */
      
$('#addNewComment, .responce').click(function(){
          var clickId = this.id;
		  commentid.id = clickId;
          CommentForm(); // Создаем клона формы
          
          if($(this).attr('id') == 'addNewComment')
          {
              // Новый комментарий
              // Добавляем форму после всех комментариев
            commentForm.appendTo('#commentRoot').slideDown(500);
             
          }
          else
          {
              // Новый ответ
              // Добавляем форму под родительским комментарием 
              // Для этого находим родительский элемент li
              var parentComment = $(this).parent().parent();
			  $('#newComment').slideUp(5000);
              // в sendDataComment добавим идентификатор родителя
             sendDataComment.parent_id = clickId;
			 commentnew.parent_id = clickId;
             var childs =  parentComment.find('ul'); // Ищем у этого коммента потомков (ответы)
             if(!childs.length)
             {
              // Если у этого комментария нет  ответов (потомков) добавим для ответов контейнер ul, а затем уже в этот контейнер нашу форму
                 parentComment.append('<ul></ul>');
                 commentForm.appendTo(parentComment.children('ul'));
				 
             }  
             else
              commentForm.prependTo(childs); // Добавляем форму в контейнер для ответов
              
          }
		  $('#companel' + clickId).fadeOut(500);//скрытие панели коммента
          commentForm.slideDown(500); // Показываем форму
		
          return false; // предотвращаем дефолтное действие браузера
      });
      
      
     
      $('#cancelComment').live('click', function(){
	  $('.companel').fadeIn(500);
          // Здесь live обязательно, т.к. мы работаем не с самой формой, а ее клоном
          removeCommentForm();
  
      })
 
      
 /* По клику на кнопку "Сохранить", доформировываем объект данных и отправляем их на сервер */

 $('button#save').live('click',function(){
    sendDataComment.author = commentForm.find("input[name='name']").val();   
    sendDataComment.comment = commentForm.find("textarea").val();
	commentnew.comment = sendDataComment.comment;
    sendData(); // Отправка данных
    
 });

 // Функция отправки данных комментария на сервер

function sendData()
{
   commentForm.find('button').hide().next().show(); // Прячем кнопку и показываем лоадер

  $.post(
           "/includes/add_feed.php",
           sendDataComment, 
           function(data){ // Обработчик ответа от сервера
commentnew.id = data;
formToComment();
		   //console.log(commentnew);
          }
)


}

 
 // Функция преобразование формы в комментарий

 function formToComment()
 {
   
   
console.log(commentnew);
   
   
    $.post(
           "/includes/return_feedbody.php",
           commentnew, 
           function(data){ // Обработчик ответа от сервера
//console.log(data);
//$('#commentroot').html(data);
$('ul#commentsRoot' + commentid.id).fadeIn(500).append(data);
removeCommentForm();
commentForm.removeAttr('id');
sendDataComment = {};
console.log(sendDataComment);
commentForm = null;
          }
)
 // Обязательно commentForm присваиваем значение null, таким образом, мы разорвем связь между полученным в итоге комментом и объектом в js 
 }
     
    
  });

собственно вот и сам код))) Можете что либо сказать про больного? Возможно реанимировать?

brussens 15.06.2012 16:00

Может кто нибудь помоч?

tadjik1 15.06.2012 16:08

честно говоря, очень долго читать, первое, что встретилось:

// Функция удаления клона
      function removeCommentForm()
      {
         commentForm.fadeOut(500);
         sendDataComment = {};
      }

фейдаут не удаляет элемент, а только прячет. может быть в этом дело. попробуйте
commentForm.fadeOut(500, function() { $(this).remove(); });

brussens 15.06.2012 16:54

Цитата:

Сообщение от tadjik1 (Сообщение 181658)
честно говоря, очень долго читать, первое, что встретилось:

// Функция удаления клона
      function removeCommentForm()
      {
         commentForm.fadeOut(500);
         sendDataComment = {};
      }

фейдаут не удаляет элемент, а только прячет. может быть в этом дело. попробуйте
commentForm.fadeOut(500, function() { $(this).remove(); });

Спасибо, попробовал, ничего к сожалению не получилось((( Только вот заметил одну вещь: после появления комментария почему то не работает повторное добавление на только что добавленном, на добавленных ранее до последнее перезагрузки страницы появляется поле и всё работает, теперь совершенно я потерялся(((

brussens 15.06.2012 20:21

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

Deff 15.06.2012 21:27

brussens,
Тестовик с действием есть ? больно код длиннен и нет обвязки

brussens 15.06.2012 21:55

А как можно связаться? Через 5 минут будет тестовик

Deff 15.06.2012 22:16

brussens,
Выложите тут или в личку


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