Могу ли я, чтобы jQuery загружал страницу после завершения переключения слайдов? - PullRequest
1 голос
/ 22 января 2011

У меня есть кнопка, ссылающаяся на отдельную страницу, которая находится внутри панели, которая использует jQuery для открытия и закрытия слайдов. При нажатии на кнопку я хочу, чтобы панель закрывалась, а затем загрузила связанную страницу в главном окне.

Вот код:

$("a.appLink").click(function(){
    closePanel();
});

var closePanel = function(){
    if ($(".panel").is(":visible")) {
        $(".panel").slideToggle("medium",plusMinus)
    }}

Обратный вызов «plusMinus» - это просто еще одна функция, которая переключает небольшое изображение, чтобы указать, можно ли расширить панель или нет.

Проблема в том, что когда я нажимаю на ссылку, новая загрузка страницы прерывает анимацию закрытия панели, позволяя лишь частично закрыть ее до перезагрузки страницы. Есть ли способ загрузить связанную страницу как функцию обратного вызова после «closePanel» вместо обычной ссылки HTML, чтобы панель могла иметь возможность полностью закрыться?

Большое спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 22 января 2011

Вам необходимо отменить щелчок, а затем изменить location непосредственно в обратном вызове на slideToggle.Что-то вроде:

$("a.appLink").click(function(){
    closePanel(this.href); // <== Pass the `href` of the link
    return false;          // <== Cancel the click
});

var closePanel = function(href){
    if ($(".panel").is(":visible")) {
        $(".panel").slideToggle("medium",function() {
            plusMinus();
            location = href; // <== Navigate to the link
        });
    }
    else {
        location = href;     // <== If it makes sense to do the navigation anyway
    }
};
...

Несколько не по теме, но: обратите внимание, что при этом вы будете ломать Shift + Click, Ctrl + Click и т. Д., Потому что вы отмените действие, которое ониактивируйте и замените его своим собственным действием.Вы должны спросить себя, подходит ли вам предоставленный пользовательский опыт и стоит ли это делать.

0 голосов
/ 22 января 2011

Вы можете использовать event.preventDefault() и перенаправить пользователя позже внутри slideToggle обратного вызова.

$("a.appLink").click(function(event){
    // Cancel the default behavior of the link:
    event.preventDefault();
    var link = this;
    closePanel(function() {
        plusMinus();
        window.location.href = link.href;
    });
});

var closePanel = function(callback){
    if ($(".panel").is(":visible")) {
        $(".panel").slideToggle("medium", callback)
    }
}

Это должно направить пользователя на новую страницу после завершения plusMinus.

Вот рабочий пример: http://jsfiddle.net/andrewwhitaker/QDYvx/

...