Вопрос

Я загружаю страницу с помощью load(), а затем динамически создаю

ярлык.Затем я использую live() для привязки события щелчка и запускаю функцию.В конце вызов unload().

Проблема в том, что когда я снова загружаю ту же страницу (без обновления), при нажатии функция будет запущена дважды.Если я снова выйду (снова с выгрузкой()) и снова загружу страницу, то клик сработает 3 раза и так далее....Пример моего кода:

$('#tab').click(function() {
 $('#formWrap').load('newPage.php');
});
$('div').after('<p class="ctr" ></p>');
$('p.ctr').live('click', function(e) {
   if($(e.target).is('[k=lf]')) { console.log ('one'); delete ($this); }
   else if ....
});
function delete () {
  $.post( 'update.php',  data);
}

у меня есть другие $.post внутри на этой странице, а также на приведенном выше живом fnc, и все работает хорошо.Вышеупомянутый вариант также работает, но, как я уже сказал, второй заряд сработает дважды, затем 3 раза и так далее...Самое странное для меня то, что если заменить консоль на console.log('two');сохраните страницу и загрузите страницу без обновления, она будет срабатывать в разных строках - одна, две -

если я выгружу страницу, замените консоль на console.log('three');и загрузка снова выстрелит раз два и три.Я пытаюсь использовать:

$.ajax({ url: 'updateDB.php', data: data, type: 'POST', cache:false });

$.ajaxSetup ({ cache: false });

header("Cache-Control: no-cache");

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

Это было полезно?

Решение 2

на самом деле ответ принадлежит @vittore.

Я просто попытаюсь объяснить немного лучше, что происходит:

тот live () fn находился внутри страницы, которую я загружал.И на первом load () live fn назначает обработчик щелчка.НО когда вы используете выгрузку, а затем удаляете все элементы с этой страницы, связь между кликом и обработчиками остается.

И когда я снова загружал ту же страницу (без обновления), live функция сохранит старый обработчик, а также снова прикрепит обработчик, и так каждый раз. load () Это использовано.

трюк, который нужно использовать die () до unload ().НО следует учитывать еще один момент:мы не можем использовать цепочку с live() ($('div').children().live() не получится ) А ТАКЖЕ хотя:

$('.div .ctr').live() будет работать.

просто звоню $('.ctr').die() не будет работать.

Поэтому вам придется использовать для обоих один и тот же селектор. $('.ctr').live() а потом $('.ctr').die()

возможно, это поможет кому-то.А также проверьте новую 1.4.2 delegate () и undelegate ()

Другие советы

Я думаю, что у вас может быть опечатка, если использовать ($this) против $(this);
Также обратите внимание, что в JavaScript есть оператор удаления, поэтому вы можете попробовать другое имя функции.
У вас также может быть где-то кеш (веб-серверы по умолчанию устанавливают кеш для файлов .js)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top