2011-10-07 3 views
8

私は500ミリ秒のサブメニューが開いた後(div.slide_up_sub_menu)、ユーザがメニューボタン( '.menu_item')に触れたりクリックしたり保持したりするiosウェブキットベースのアプリケーションのメニューを実装しようとしています。指/マウスをサブメニューli項目までスライドさせて離すことができるはずです。ios webkitのイベントは発射されませんか?

<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> 

アプリケーションは、どのサブメニュー項目がトゥイェンド/マウスアップイベントが発生したかを検出できる必要があります。私はメニュー項目にタッチスタートイベントをバインドし、500ms待ってから、サブメニューに表示するように指示しています。ユーザーが指を離すと、イベントが発生してサブメニューが閉じます。ユーザーがサブメニュー項目のタッチを停止した場合は、それを検出する必要があります。現在、mouseUpイベントサブメニュー項目の検出は、デスクトップ上のSafariで作品に起こった:

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

が、私はtouchendハンドラを使用して同じことを行う場合には、iPad上で動作しません:

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

私はすべてのtouchendイベントを見れば、私はサブメニュー項目にタッチを終了したときに、私は親のサブメニュー項目への参照を取得することができます:

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

が、サブメニュー項目への参照を。

誰かが、なぜtouchendイベントがサブメニュー項目で起動されていないのでしょうか?

おかげ

答えて

0

あなたはマルチタッチデータを使用する必要がない場合は、iPad上のmouseup使用し続けることがあります。

さらに読書: http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

+0

お返事ありがとうございました。残念ながら、画面に触れるとすぐにmousedownイベントが発生しません。 mouseupイベントと並行して指が画面を離れると発生します。 http://www.quirksmode.org/blog/archives/2008/08/iphone_events.html – Craig

3

は、多分それは答えることが少し遅れます。 タッチイベントが発生したため、このイベントは発生しません。だから、あなたがしたいことをするには、適切なx座標とy座標を送るdocument.elementFromPointメソッドを使用してください。

16

touchcancelが早く発砲したため、touchendは発砲しません。あなたがしたい場合は、完全なタッチは、ブラウザが、これはスクロールイベントであると判断した場合にはそうでないtouchmoveイベントが発生した場合、それはtouchcancel、決して火を発射します、あなたが「touchmove」イベントのコールバックで

e.preventDefault() 

を呼び出す必要が取り扱う追いつきましたトゥーチェンド。

関連する問題