powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JS) JQuery непонятное поведение обработчика на асинхронных данных
3 сообщений из 3, страница 1 из 1
(JS) JQuery непонятное поведение обработчика на асинхронных данных
    #36085666
eualexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброй ночи
Вновь столкнулся с такой проблемой.
Код ниже, для краткости основные части кода заменил алертами.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$(".livetable td").live("click", function(){
	if(this.firstChild != null){
		alert("1st alert");
		$(this).keypress(function(event) {
			alert("2nd alert");		
		})
	}
})
Данный обработчик вешается на таблицу которая подгружается асинхронно. При его выполнении первый алерт выполняется 1 раз, а вот второй от 2х и более.
Там где стоит 2 алерт у меня в коде прописан $.ajax в результате выполнения обработчика - он при одном проходе по коду отправляет (сколько я насчитал) 2, 4 10 запросов к бд. (тестировал на инсертах.)
Как можно этот произвол прекратить?
Спасибо!
...
Рейтинг: 0 / 0
(JS) JQuery непонятное поведение обработчика на асинхронных данных
    #36085668
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а) имхо неправильно проверять наличие чилда - надо делать универсально;
б) непонятна таблица, "которая подгружается асинхронно" - надо видеть как;
в) когда ты ловишь "проходы" и что это такое вобще?
г) при чем тут запросы к БД?

Сформулируй более четкие вопросы и раскрой смысл написанного.
...
Рейтинг: 0 / 0
(JS) JQuery непонятное поведение обработчика на асинхронных данных
    #36085688
eualexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

тогда выкладываю весь код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
$(".livetable td").live("click", function(){
	if(this.firstChild != null){
		if(this.firstChild.nodeType== 3  && $(this).attr("id")=="input"){
//Удаление инпута из ранее редактируемой ячейки
			$("input[name='change']").replaceWith($("input[name='defv']").val());
			$("input[name='defv']").remove();
//Inputы в новой ячейке.
//Инпут в который будет заноситься значение
			var newElement=$("<input type='text' name='change' width='10px'>").val($(this).text()).css("width", "50px");
//Скрытый инпут который будет хранить в себе то значение которое было в ячейки изначально. 
//если переход в другую ячейку будет осуществлен путем нажатия на другой ячейке левой кнопки то в текущую 
//ячейку будет помещено значение из скрытого инпута, после чего оба инпута (change и defv - defalut value) будут стерты.
			var newDefVal=$("<input type='hidden' name='defv' width='10px'>").val($(this).text()).css("width", "10px");
			$(this).empty().append(newElement).append(newDefVal); }
//Получение параметров ячейки ( значение, номер строки (храниться в tr#id), индекс столбца)
		newValue=$("input[name='change']").val();
		id	=$("input[name='change']").parent().parent().attr('id');
		field	=$("tr#"+id+" td").index(this);
//Обработка по нажатию enter (отправить newValue, id, field на сервер ОДИН!!!! раз
//Удаляю инпут со значением по умолчанию 
		$(this).keypress(function(event) {
		//Начинаю обработку enter
		if (event.which ==  13 ){
			$("input[name='defv']").remove();
				$.ajax({
				type: "POST",
				cache: false,
				data: 'json={"данные"}',
				url: "test.php",
				success: function(data, textStatus){
					alert(data); },
				error: 	function(){
					alert("I cannot reach server1"); }
		})
//Удалая инпут из ячейки и оставляю только значение. 
		$("input[name='change']").replaceWith(newValue); }
		})
	}
})

Этот скрипт обрабатывает таблицу с class=livetable собственно скрипт прописан в отдельном файле. таблицу получаю через ajax. Комментарии по логике скрипта дал в его теле.
Проблема в том что когда я закончил редактирование ячейки и нажал enter запрос уходит несколько раз не сервер, Причем это количество все время разное.
Все начинается с 2 отправок. Затем если редактировать ту же самую ячеку ещё раз данные уже уйдут 4 раза. и т.д. максимум доходил до 10 отправок за 1 нажатие enter.
Почему так себя ведет не ясно.
IDVsbruckа) имхо неправильно проверять наличие чилда - надо делать универсально;
я 5 часов искал как его загрузить. тот вариант который был в скрипте оказался единственно произведенно-рабочим. была мысль через :children но как его привязать к $(this) я нигде не нашел и понял что вязать :children и все что тут можно только с конструкциями вида $("путь к элементу:сhildren") но никак не $(this+":children");
IDVsbruckб) непонятна таблица, "которая подгружается асинхронно" - надо видеть как;
Таблица грузиться в виде
function loadtbl(){
$.ajax({только параметры})})
получается стандартная таблица 5*5
IDVsbruckв) когда ты ловишь "проходы" и что это такое вобще?
под этим я хотел сказать что вызвав функцию 1 раз ощущение такое что она либо где то в кэш заседает и там складывается либо как будто её запускаю много раз.
Про г можно забыть.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JS) JQuery непонятное поведение обработчика на асинхронных данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]