jquery window.click не работает в первый раз - PullRequest
1 голос
/ 20 апреля 2011

страница здесь: http://webpages.marshall.edu/~glasser1/jquery.html

Я пытаюсь повторить старый стиль входа на страницу Twitter. Если пользователь нажимает «войти», он должен открыть поле для входа, а если он снова нажмет «войти», он должен скрыться. Кроме того, если пользователь щелкает внутри поля «вход в систему», это нормально, и поле должно оставаться, но если пользователь нажимает ВНЕ коробки, оно должно скрыться.

Что я не могу объяснить, так это то, что если ваш первый щелчок - это текст «Войти», а второй щелчок - это поле «Вход», поле скрывается, когда это не должно быть. однако это происходит только в том случае, если это ваши первые два клика. После этих начальных кликов все работает как задумано.

Вот код:

$("#logoncontent, #loginerror, #success").hide();
$(window).load(function(){
    //click "sign in" to toggle login box
    $("#signincontainer").click(function(e){
            $("#logoncontent").slideToggle(400);
            //stop prop from reaching parents up dom tree
            e.stopPropagation();
            // return false so that the click of "sign in" doesn't also trigger the $(window).click function below
            return false;
    });
    //if there is a click in the window
    $(window).click(function(){
        //if that click in the window was INSIDE of the box, break out of this function
        $("#logoncontent").click(function(){
            //breaking out of function
            return false;
        });
        //if the click was outside of box, slide content up
        $("#logoncontent").slideUp(400);
    });
});     

Опять же, вы можете проверить страницу здесь: http://webpages.marshall.edu/~glasser1/jquery.html

Заранее спасибо, и если вы не можете воспроизвести ошибку, дайте мне знать. Как я уже сказал, это работает, если это не ваши первые два клика.

Боб Г

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Ваша проблема ниже:

$(window).click(function(){
    //this part means that on the first click this handler is assigned
    $("#logoncontent").click(function(){
        //breaking out of function
        return false;
    });
    //if the click was outside of box, slide content up
    $("#logoncontent").slideUp(400);
});

Вам нужно переехать

    $("#logoncontent").click(function(){
        //breaking out of function
        return false;
    });

внутри обработчика загрузки для окна, а не в обработчике щелчков. В настоящее время обработчик кликов для входа в систему назначается только при первом щелчке окна, что объясняет тот факт, что ваша проблема возникает только сначала.

1 голос
/ 20 апреля 2011

Я думаю, что вы удалите "e.stopPropagation ();"

0 голосов
/ 20 апреля 2011

Я решил собрать пример того, как я буду решать эту проблему, используя немного другой подход к вашему. В событии click, связанном с окном, я проверяю, находится ли элемент clicked внутри поля или нет, и скрываю его, если это не так.

http://jsbin.com/okiqe6

...