jquery mobile первое нажатие / клик регистрируется дважды - PullRequest
2 голосов
/ 15 сентября 2011

У меня есть приложение jquery / phonegap, и все хорошо, быстро и работает, за исключением одного небольшого элемента.первый начальный клик, коснитесь того, что выбрано дважды.после того, как вы сделали первый, все в порядке.Я пробовал все виды, как e.preventDefault ();во многих местах и ​​пробовал pr-загрузку страниц, но все равно, что бы я ни получал, этот первый двойной щелчок.

вот пример ecmascript

$('nav[id="homeList"] div[data-cust="homelink"]').live("vclick",function(e){
    e.preventDefault();

    var over = $(this).attr('data-over');

    if(over !== undefined){ $(this).addClass(over); }
    var pageTo = $(this).attr('data-pagename');

    Log( 'Page to: ' + pageTo );

    if(pageTo !== undefined){
        $.mobile.changePage("#" + pageTo);
        if(over !== undefined){ $(this).removeClass(over); }
    }

    //e.preventDefault();
});

вот пример HTML:

<div class="ui-listitem">
        <div class="block sprite2 binbox relat" data-pagename="inbox" data-over="binboxover" data-cust="homelink"></div>
     </div>

навигация с идентификатором homeList - это просто мой html5-тег, внутри которого все элементы пользовательского интерфейса действительно озадачены, но я уверен, что кто-то знает, как, возможно, отменить это странное поведение.

спасибо

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

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

            var lastClick = $( this ).attr( 'data-lastclick' ),
        curClickPoint = e.clientX+'x'+e.clientY
        if( lastClick === curClickPoint) return false;
        $( this ).attr( 'data-lastclick', curClickPoint );

Ладно, пришло окончательное решение:

установить глобальный

var hasDoneFirstClick = false;

в той же функции, что и выше, я использовал этот код:

if ( !hasDoneFirstClick ) { 
        hasDoneFirstClick = true;
        return false;
    }

этотолько первоначальный клик, который удваивается, поэтому я просто игнорирую первый в истории клик / тап!

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

Я не уверен, что это отвечает на ваш вопрос, но jQueryMobile в бета-версии 2 решил использовать click вместо vclick.Вы можете прочитать примечания к выпуску по этому вопросу:

Цитата:

Возврат: Мы перешливернуться из vclick для перехода по ссылкам

В бета-версии 1 мы решили использовать наше пользовательское событие vclick для обработки ссылок Ajax, чтобы повысить скорость отклика и скрыть панель URL на телефонах iPhone и Android.Несмотря на то, что мы провели немало тестов, прежде чем приступить к бета-версии 1, мы начали слышать отзывы о том, что это изменение вызвало некоторые существенные проблемы в дикой природе, включая:

  • События нескольких нажатийвызывая навигацию и проблему с элементом формы. В некоторых ситуациях при нажатии на элемент события касания / нажатия, кажется, запускаются дважды по ссылкам, и это связано с крайними случаями, когда цель события касания и события мыши не совпадают из-за того, какбраузеры рассчитывают допуски для этих событий.Это наиболее заметно в Android 2.1, но в различной степени затрагивает большинство браузеров на основе WebKit, когда события касания происходят около края элемента.

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

0 голосов
/ 22 октября 2013

Я знаю, что это старый, но я только натолкнулся на него, и в случае, если кто-то еще делает, я проследил его до использования $.mobile.changePage в моем $(document).ready(), который, я думаю, поставил в очередь парусобытия последовательности, которые были отсортированы по первому «реальному» щелчку.

...