событие в ios webkit не запускается? - PullRequest
8 голосов
/ 07 октября 2011

Я пытаюсь реализовать меню для приложения на основе ios webkit, в котором пользователь касается / щелкает и удерживает кнопку меню ('.menu_item'), через 500 мс открывается подменю (div.slide_up_sub_menu) ипользователь должен иметь возможность подвести палец / мышь к элементу подменю и отпустить.

    <li class="menu_item">
       ASSET MANAGEMENT
       <div class="slide_up_sub_menu hidden_menu">
         <ul class="submenu">
           <li>Unified Naming Convention</li>
           <li>Version Control</li>
         </ul>
       </div>
    </li>

Приложение должно быть в состоянии определить, с каким элементом подменю произошло событие touchend / mouseup.Я привязываю событие touchstart к пункту меню, жду 500 мс, а затем говорю показать подменю.Когда пользователь отпускает палец, событие касания должно запускаться при закрытии подменю.Если пользователь перестал касаться элемента подменю, он должен быть обнаружен.В настоящее время обнаружение того элемента подменю, которое произошло в Mousef, работает в Safari на рабочем столе:

$('ul.submenu li').live('mouseup', function(e){
   console.log($(e.currentTarget)); //works on the desktop
});

, но если я делаю то же самое с помощью обработчика штрихов, это не работает на ipad:

$('ul.submenu li').live('touchend', function(e){
   console.log($(e.currentTarget)); //never fires
});

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

$(document.body).bind('touchend', function(e) {
    console.log($(e.target).html()); //logs ASSET MANAGEMENT
 });

, но нет ссылки на элемент подменю.

Кто-нибудь знает, почему не происходит событие касания для элементов подменю?

Спасибо

Ответы [ 3 ]

16 голосов
/ 11 июня 2012

touchend не срабатывает, потому что touchcancel сработал раньше.Если вы хотите полностью обрабатывать четные касания, вам нужно вызвать

e.preventDefault()

в обратном вызове события «touchmove», в противном случае, когда происходит событие touchmove, если браузер решит, что это событие прокрутки, он запустит Touchcancel иникогда не стреляй, касайся.

4 голосов
/ 02 мая 2012

Может быть, уже поздно отвечать. Это событие никогда не сработает, потому что события касания срабатывают на самом элементе, на котором произошло касание. Итак, чтобы сделать то, что вы хотите, одним из решений является использование метода document.elementFromPoint, в который вы будете отправлять соответствующие координаты x и y.

0 голосов
/ 12 октября 2011

Если вам не нужно использовать мультисенсорные данные, вы можете продолжать использовать mouseup на ipad.

дальнейшее чтение: http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

...