JQuery вкладки - почему количество запросов увеличивается? - PullRequest
0 голосов
/ 05 октября 2011

Допустим, у меня есть вкладка jQuery UI (загружен ajax), определенная для вызова страницы abc.html.На этой странице я вызываю другую страницу, скажем, def.html.В моем определении вкладки jQuery я определил, что ссылки во вкладках должны открываться во вкладках, это определение:

$(document).ready(function() {
    $("#tabs").tabs({
        select: function(event, ui) {
            $(ui.panel).undelegate('a', 'click');
        },
        load: function(event, ui) {
            $(ui.panel).delegate('a', 'click', function() {
                $(ui.panel).load(this.href);
                return false;
            });
        }

    });
});

Хорошо, так что это прекрасно работает при переходе назад и вперед между ссылками на вкладке.Однако на моей странице def.html у меня есть кнопка, которую я хочу использовать для загрузки начальной вкладки.Вот как я это делаю:

$("#cancelButton").click(function(event){
    event.preventDefault();
    $("#tabs").tabs('load', $("#tabs").tabs('option', 'selected'));
});

Это вызывает мой начальный abc.html просто отлично.Проблема в том, что когда я снова вызываю ссылку на def.html из моего недавно загруженного файла abc.html, запрос на def.html происходит дважды.Я снова нажимаю на кнопку cancelButton, она перенаправляет на abc.html, я снова нажимаю на def.html, и теперь мой запрос вызывается три раза и т. Д.

Я предполагаю, что что-то где-то связывается несколько раз,но не освобождается.Любая помощь будет, спасибо.

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Хорошо, так что я понял это. Что случилось, когда я позвонил

$("#cancelButton").click(function(event){
    event.preventDefault();
    $("#tabs").tabs('load', $("#tabs").tabs('option', 'selected'));
});

сработает только событие tabsload. Это означает, что событие tabsselect не было запущено ранее, поэтому ссылки не становились неделегированными и были связаны несколько раз.

Что решило проблему, так это отменила делегирование и затем делегировала ссылки в содержимом вкладок при загрузке, удалив любые функции выбора вкладок. Вот мое новое определение вкладки:

$(document).ready(function() {
    $("#tabs").tabs({
        load: function(event, ui) {
            $(ui.panel).undelegate('a', 'click');
            $(ui.panel).delegate('a', 'click', function() {
                $(ui.panel).load(this.href);
                return false;
            });
        }
    });
});
0 голосов
/ 05 октября 2011

Я думаю, это потому, что вы вызываете методы для исходного селектора $("#tabs") вместо результата первоначального вызова tabs. Попробуйте сохранить ссылку и использовать ее в обработчике кнопки отмены:

var $tabs = $("#tabs").tabs(...);

$("#cancelButton").click(function(event){
  event.preventDefault();
  $tabs.tabs('load', $tabs.tabs('option', 'selected'));
});
...