на клик работает дважды - PullRequest
       40

на клик работает дважды

0 голосов
/ 06 февраля 2012

http://jsfiddle.net/uTV5k/19/

Здравствуйте,

Я использую приведенный ниже скрипт на своем мобильном сайте. Пожалуйста, посмотрите jsfiddle смоделированного скрипта и разметки.

Сценарий, приведенный ниже, является именно тем, что находится на моем мобильном сайте, а js fiddle является его копией.

В jsfiddle чередование щелчков работает нормально. Первый щелчок открывает анимацию, а второй щелчок закрывает анимацию.

Проблема на моем мобильном сайте: первый клик открывает анимацию, а вторая анимация запускается сразу после второго клика. Но в скрипке все работает нормально.


$(window).load(function(){

    $(window).bind("orientationchange resize", function(e) {

        $('.home-mod').each(function() {

            var homeModule  = $(this).height(),
                homeTitle   = $(this).find('.home-title-button').outerHeight(),
                homeStart   = homeModule - homeTitle,
                homeOpen    = false;

            $(this).find('.mod-info').css("top", homeStart + "px");

            $(this).on('click', function () {

                if (homeOpen) {

                    // second click alternation
                    $(this).find('.mod-info').animate({ top: homeStart + "px" });
                    homeOpen = false;

                } else {

                    // first click alternation
                    $(this).find('.mod-info').animate({ top: 0 });
                    homeOpen = true; 

                }
            });

        }); 

    }).trigger("resize");

});



Я действительно не уверен, почему это произойдет. Использование этого в iScroll не должно вызвать каких-либо проблем, не так ли?

заранее спасибо

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

во-первых: загрузка окна происходит

вы звоните

.trigger("resize");

, что активирует привязку при нажатии.

later on - если загрузка окна происходит снова -это повторный код, который снова - повторно связать щелчок

0 голосов
/ 06 февраля 2012

Разница между вашим скриптовым кодом и вашим живым кодом заключается в наличии обработчика изменения размера / ориентации.

Весь ваш другой код находится внутри того значения, что он будет запускаться каждый раз, когда вы запускаете ваш обработчик изменения размера. http://jsfiddle.net/uTV5k/20/ - вариант вашей скрипки с этим обработчиком. Он плохо себя ведет.

Это можно исправить, удалив старые обработчики кликов перед добавлением новых, используя .off('click').

Эта скрипка включает это обновление и, похоже, снова ведет себя: http://jsfiddle.net/uTV5k/21/

Другой (и, возможно, лучший) способ решения этой проблемы - просто пересчитать значения, необходимые для изменения размера, и сохранить их более глобально. Затем ваши функции щелчка могут быть добавлены один раз и ссылаться на эти глобальные значения. Это гораздо больше, переписать код, и я просто решил очень просто исправить вашу проблему.

...