не работает повторно скрипт
Доброго времени суток, уважаемые форумчане) При работе с Jquery появилась проблема на последнем этапе создание древовидной системы комментариев. Вобщем комментарий добавляется прекрасно, но вот при попытке добавления второго комментария без перезагрузки при добавлении первого скрипт как будто отключается. Подскажите пожалуйста, в чём может быть проблема? Заранее спасибо)
|
Тут экстрасенсов нет.
Код в студию. |
$(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 } }); собственно вот и сам код))) Можете что либо сказать про больного? Возможно реанимировать? |
Может кто нибудь помоч?
|
честно говоря, очень долго читать, первое, что встретилось:
// Функция удаления клона function removeCommentForm() { commentForm.fadeOut(500); sendDataComment = {}; } фейдаут не удаляет элемент, а только прячет. может быть в этом дело. попробуйте commentForm.fadeOut(500, function() { $(this).remove(); }); |
Цитата:
|
Ув. форумчане, помогите плиз разобраться с этим скриптом, ибо уже месяц не могу с ним поладить... Понятно, что скрипт отказывается работать второй раз...
|
brussens,
Тестовик с действием есть ? больно код длиннен и нет обвязки |
А как можно связаться? Через 5 минут будет тестовик
|
brussens,
Выложите тут или в личку |
Цитата:
SyntaxError: Unexpected end of input Что обозначает ошибка нашёл, а вот где она происходит не найду... Вот новый более простой код $(document).ready(function() { var form = "<li id='newComment' class='commentform'><div class='clear'></div><div class='commentContent'><div class='comment'><textarea name='newCommentText'></textarea></div><button id='save'>Сохранить</button><img class='loader' src='images/loader.gif'><button id='cancelComment'>Удалить</button></div></li>"; var CommentData = {};//глобальный массив с данными для отпраки $('.responce').click(function(){//клик по кнопке ответить $('.companel').show(); if ($("li").is("#newComment")) { $('#newComment').remove(); } CommentData.id = this.id; $("#companel" + CommentData.id).hide(); $("#companel" + CommentData.id).after(form); }); $('#cancelComment').live('click', function(){//клик по кнопке удалить форму $('#newComment').remove(); $('.companel').show(); $("#commentRoot").after(form); }); $('#save').live('click',function(){//клик по кнопке сохранить CommentData.comment = $("textarea").val(); sendData(); CommentData = {}; console.error(CommentData); }); function sendData() {// Функция отправки данных комментария на сервер $.post("/includes/add_feed.php", CommentData, function(data){ // Обработчик ответа от сервера formToComment(); }); } // Функция преобразование формы в комментарий function formToComment() { $.post("/req.php", function(data){ // Обработчик ответа от сервера $('#commentRoot').html(data); }); } }); Заранее благодарю... |
brussens,
Если вы не оч сильны в PHP (посколь Аякс ответ нун корректно прописать на серве проще отправлять данные в скрытой форме с перенаправлением данных в изначально пустой скрытый фрейм(для теста -не скрываем) По событию загрузки фрейма - считывать данные из него Заодно и протестируете Ответ Как организовать перенаправление => http://htmlbook.ru/html/form/target |
А про Ajax я не знал, что там есть какие то ограничения... Просто думал, что если скрипт выполняется один раз, то и второй ведь раз должен( Это может быть например изза отсутствия exit()???
|
Цитата:
Там нет ограничений, кроме старых Ие - сделайте для теста на фрейме не скрывая фрейм, - мну подозревает что проблема в серверном ответе... Если нет ... бум думать далее |
Часовой пояс GMT +3, время: 11:32. |