2011-10-07 33 views
8

Tôi đang cố triển khai thực đơn cho ứng dụng dựa trên web ios, trong đó người dùng chạm/nhấp và giữ nút menu ('.menu_item'), sau 500ms menu phụ sẽ mở (div.slide_up_sub_menu) và người dùng sẽ có thể trượt ngón tay/chuột của họ lên đến một mục li menu con và thả ra.sự kiện chạm trong ios webkit không kích hoạt?

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

Sau đó, ứng dụng sẽ có thể phát hiện mục menu con/sự kiện touchend/mouseup nào đã xảy ra. Tôi đang ràng buộc một sự kiện touchstart cho mục trình đơn, chờ đợi 500ms, và sau đó nói với menu phụ để hiển thị. Khi người dùng nhả ngón tay của họ, một sự kiện chạm phải kích hoạt menu con. Nếu người dùng đã dừng liên lạc của họ trên một mục menu phụ, nó sẽ được phát hiện. Hiện nay phát hiện trong đó submenu mục một sự kiện xảy ra trên mouseup công trình trong Safari trên máy tính để bàn:

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

nhưng nếu tôi làm như vậy sử dụng một handler touchend nó không hoạt động trên một ipad:

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

nếu tôi tìm kiếm tất cả các sự kiện touchend tôi có thể lấy một tham chiếu đến phụ huynh mục trình đơn phụ khi tôi chấm dứt liên lạc trên một mục menu con:

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

nhưng không đề cập đến mục menu con.

Có ai có bất kỳ ý tưởng nào tại sao sự kiện chạm không được kích hoạt trên các mục menu con không?

Cảm ơn

Trả lời

0

Nếu bạn không cần sử dụng dữ liệu cảm ứng đa điểm, bạn có thể tiếp tục sử dụng mouseup trên ipad.

tiếp tục đọc: http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

+0

Cảm ơn bạn đã trả lời câu trả lời, thật không may, sự kiện được tổ chức không kích hoạt ngay lập tức khi bạn chạm vào màn hình. Nó chỉ bắn sau khi ngón tay của bạn rời khỏi màn hình song song với sự kiện mouseup. http://www.quirksmode.org/blog/archives/2008/08/iphone_events.html – Craig

3

Có lẽ đó là một chút muộn để trả lời. Sự kiện này sẽ không bao giờ cháy, bởi vì các sự kiện liên lạc sẽ kích hoạt trên phần tử rất dễ xảy ra cảm ứng. Vì vậy, để làm những gì bạn muốn, một giải pháp là sử dụng phương thức document.elementFromPoint, để bạn gửi các tọa độ x và y thích hợp.

16

touchend không kích hoạt vì chạm vào đã hủy trước đó. Nếu bạn muốn có đầy đủ cảm ứng SỐ CHẴN xử lý bạn cần phải gọi

e.preventDefault() 

trong callback của "touchmove" sự kiện, nếu không khi một sự kiện touchmove xảy ra nếu trình duyệt quyết định rằng đây là một sự kiện cuộn nó sẽ cháy touchcancel và không bao giờ cháy touchend.

Các vấn đề liên quan