Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.03.2014, 22:24
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

А ну опять дело в том же: при каждом нажатии у тебя соpздается новый обработчик для кнопки отправить (.send_reply_comment). Его нужно создавать не при нажатии на кнопку ответить, а одним обработчиком с делегированием.

Поправил, но особо не вникал,если в обработчике использовались внешние переменные из функции mat_reply, то работать будет криво, так что нужно будет разобраться с ними.
$(document).ready(function() {
	var template_path = "http://test.altme.org.ua/altme/template/altme_1";

	$('.send_new_comment').on('click', function() {
			var message = $('.new_comment').val();
			var id_mat = $(this).attr('id_mat');
			$.ajax({
	            type: "POST",
	            url: template_path+"/function_php/all_function.php?page=material&type=send_new_commet",
	            dataType: "json",
	            async:false,
	            data: {
	            	message:message,
					id_mat:id_mat
	            },
	            success: function (data) {
	            	if(data['status']=='true'){
	            		$('.new_comment').val('');
						$('.event_other').removeClass('red').addClass('green').text('Успешно оставлен комментарий!').fadeIn().delay(3000).fadeOut();
	            		$('.new_comment_add').prepend(data['text'])
	            		.children()
	            		.css({backgroundColor:"rgba(255,237,116,0.2)"})
	            		.animate({backgroundColor:"rgba(255,255,255,0)"},4000)
	            		.fadeIn();
	            		$('.reply').on('click',mat_reply);
	            	}else{
	            		$('.event_other').removeClass('green').addClass('red').text(data['text']).fadeIn().delay(3000).fadeOut();
	            	}
	            }
	    	});
			return false;
		});	



	function mat_reply(){

				var reply = $(this);

				var slide = $(reply).parent().parent().parent().children('.add_commnet');

							$(slide).stop().toggleClass('open');

							if($(slide).hasClass('open')){
								$(slide).slideDown('fast');

								console.log("open");
							}else{
								$(slide).slideUp('fast');
								//event.preventDefault();
								//event.stopPropagation();
								//event.stopImmediatePropagation();
								//$(reply).off('click',mat_reply);
								console.log("close");
							}
				
	}

    function send_reply_comment(){
		var message = $(this).parent().children('.reply_comment').val();
		var id_mat = $(reply).attr('id_mat');
		var id_mat_id = $(reply).attr('id_mat_id');

		$.ajax({
            type: "POST",
            url: template_path+"/function_php/all_function.php?page=material&type=send_reply_commet",
           	dataType: "json",
           	async:false,
            data: {
            	message:message,
				id_mat:id_mat,
				id_mat_id:id_mat_id
            },
     
            success: function (data) {
            		console.log("ajax done");
	            	if(data['status']=='true'){
	            		$('.reply_comment').val('');
						console.log('Успешно оставлен комментарий!');
	            		$('.reply_comment_add[id_mat_id = '+id_mat_id+']').append(data['text'])
	            		.children()
	            		.css({backgroundColor:"rgba(255,237,116,0.1)"})
	            		.animate({backgroundColor:"rgba(255,255,255,0)"},4000)
	            		.fadeIn();
	            		
	            		console.log("add: "+id_mat_id);

	 					if($(slide).attr('class').match(/open/)){
							$(slide).slideUp('fast');
						}

	 					var qw = $('.reply_comment_add[id_mat_id = '+id_mat_id+']').offset();
	 						qw['top']=qw['top']-220;

	            		$('html, body').animate({
						    scrollTop: qw.top
						}, 1000);

	            	}else{
	            		console.log(data['text']);
	            		console.log("ошибка");
	            	}
            }
    	});
			return false;
	}
	$('.matrial_comments').on('click', '.reply', mat_reply);
    $('.matrial_comments').on('click', '.send_reply_comment', send_reply_comment);
});
Ответить с цитированием
  #12 (permalink)  
Старый 06.03.2014, 22:46
Интересующийся
Отправить личное сообщение для ecSpl01t Посмотреть профиль Найти все сообщения от ecSpl01t
 
Регистрация: 11.01.2014
Сообщений: 18

поправил, все работает как часы, большое Вам спасибо !!
еще вопрос, есть альтернатива return false при <button> или <a href> ?

p.s нужно понять делегирование событий

Последний раз редактировалось ecSpl01t, 06.03.2014 в 22:48.
Ответить с цитированием
  #13 (permalink)  
Старый 06.03.2014, 22:57
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Про события почитай, чтоб лучше понимать как они работают, плюсы и минусы различных способов их объявления и про return false там же - http://javascript.ru/tutorial/events/intro

Последний раз редактировалось Zuenf, 06.03.2014 в 23:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery события on и live Esigns Общие вопросы Javascript 4 12.08.2013 15:30
Цепная обработка события MouseDown с использованием jQuery gifer Events/DOM/Window 0 18.02.2011 16:55
jQuery object в xpath. Глобальные события solarix jQuery 1 29.10.2010 16:40
События Jquery и не только Tohin Events/DOM/Window 3 21.08.2009 14:57
Обработчик события: как делает jquery? Shasoft jQuery 35 22.04.2009 09:41