jQuery .toggle требует двойного щелчка, чтобы открыться при перехвате .click - PullRequest
2 голосов
/ 06 июля 2011

У меня проблема с моей функцией переключения. У меня есть простой div, который перемещается вверх и вниз при нажатии, используя .toggle. Чтобы упростить использование страницы и т. Д. Я хочу, чтобы пользователь мог щелкнуть в любом месте экрана, чтобы «закрыть», переместить div вниз, не нажимая снова на синее поле (вроде как в мега-выпадающем меню). меню).

Проблема в том, что моя функция .click испортила переключение, и как только синий div закрывается с помощью .click вместо второй функции .toggle, необходимо дважды щелкнуть по .toggle, чтобы это будет открыто снова. Что я делаю неправильно?

Я искал другие связанные с этим проблемы с .toggle и двойным щелчком здесь, но безуспешно в поиске похожей темы

Я пробовал некоторые вещи .addClass и .hasClass, но, похоже, они не работают.

Также вот мой JQuery:

    $(document).ready(function(){


$(document).click(function() {
            if($("#banner").hasClass("open")){
                    $("#banner").removeClass("open").stop().animate({top:"350px"},350, 'swing')
            }});


$("#banner").toggle(
        function () {
            $(this).addClass("open").animate({top:"200px"},350, 'swing')
            },
        function () {
            $(this).removeClass("open").animate({top:"350px"},350, 'swing')
            });

});

1 Ответ

1 голос
/ 06 июля 2011

Почему бы просто не изменить toggle на click:

$("#banner").click(function(e) {
    e.stopPropagation();
    if ($("#banner").hasClass("open")) {
        $("#banner").removeClass("open").animate({
            top: "350px"
        }, 350, 'swing')
    }
    else {
        $(this).addClass("open").animate({
            top: "200px"
        }, 350, 'swing');
    }
});
...