Событие click вызывается несколько раз. Почему?
Здравсвуйте!
Даже не знаю как написать, чтобы было понятно. Наверное лучше показать на примере. Заходим сюда http://rusbody.com/photonew/1.html и жмём на ссылку "Открыть модальное окно" Во сплывшем окне, полистайте пару раз фото (вперед, назад) и закройте модальное окно. Потом если вы ещё раз нажмёте на ссылку "Открыть модальное окно" то она будет загружать два раза вподряд - В этом и есть косяк. Вот код $(document).ready(function(){ // ставим ссылки photossilki(); function photocontent(link,pid) { $.ajax({ type: 'POST', url: link, data: {pid: "pid"}, success: function(data){ $(".rcontent").html(data + "<div class='photo-load'></div>"); window.location.hash = "photo_" + pid; $(".body2").css("height", $(document).height()).show(); $(".photo-load").hide(); photossilki(); //alert("ok"); }, error: function(xhr, textStatus, error){ $(".rcontent").html(xhr.statusText); } }); }; function photossilki() { $("a.pr").click(function(){ $(".body").css("overflow", "hidden"); var pid = $(this).attr("id"); var link = $(this).attr("href"); $(".body2").show(); $(".photo-load").show(); //$(".rcontent").html("Загрузка..."); photocontent(link,pid); return false; }); } |
просто в порядке предположения, может и дурацкого: а не происходит ли $(document).ready() при загрузке аяксового контента?
|
А! невнимательность же, извините.
В функции photocontent вызов функции photossilki, в которой обработчик на клик навешивается ещё раз. http://api.jquery.com/one/ должно решить проблему. |
Цитата:
Спасибо за быстрый ответ, но ONE проблему не решило :( |
Цитата:
$("a.pr").live("click",function(){…}) |
тоже не помогло, первый раз работает, а на новые ссылки не срабатывает
|
а что-то я не вижу новых ссылок с классом pr.
Что вообще должно происходить? Какой результат ожидается? |
Всё работает, просто когда пытаешься открыть второй раз модальное окно, то оно загружается несколько раз...
|
rusbody, Танцы c Бубном :
function photossilki() { $("a.pr").one('click', function(){ |
Deff пробовал, всё равно несколько раз загружется
|
rusbody,
Тады ток вживую дебажить - на слух - тяжко |
для начала обновите jQuery.
потом пробните так, должно работать. $(document).ready(function () { // ставим ссылки $("body").on("click", "a.pr", function () { $(".body").css("overflow", "hidden"); var pid = $(this).attr("id"); var link = $(this).attr("href"); $(".body2").show(); $(".photo-load").show(); //$(".rcontent").html("Загрузка..."); photocontent(link, pid); return false; }); function photocontent(link, pid) { $.ajax({ type: 'POST', url: link, data: { pid: "pid" }, success: function (data) { $(".rcontent").html(data + "<div class='photo-load'></div>"); window.location.hash = "photo_" + pid; $(".body2").css("height", $(document).height()).show(); $(".photo-load").hide(); //alert("ok"); }, error: function (xhr, textStatus, error) { $(".rcontent").html(xhr.statusText); } }); }; }); |
melky не работает, посмотри
|
Цитата:
|
Ну а дальше страницы вообще не листаются
|
rusbody, так всё же что должно в итоге получиться? Каков ожидаемый результат? Может нужно всего лишь написать попроще, и тогда всё заработает.
|
Допетрил сам) Нужно удалять старые bindы перед установкой нового!
Спасибо всем, кто пытался мне помочь |
Цитата:
Цитата:
|
Deff ставил, результат был тот же
|
rusbody, Слабо вериться
one =>http://jquery-docs.ru/Events/one/#typedatafn Единственный обработчик , который срабатывает единожды и снимается наверно сократили до on |
Deff, зачем мне тебе врать? пишу же что не помогло
|
rusbody,
Ок -просто интересно было убедицо - Тогда вывод - что функция вызывается - а клика может и не происходить - тогда обработка по клику присоединяется к очередному вызову функции |
Это и происходило
|
Часовой пояс GMT +3, время: 11:45. |