2011-10-07 34 views
6

Tôi đang gặp sự cố với jQuery 1.6.4, iOS 5 và đăng ký các sự kiện chạm/chạm (như được nêu trong tiêu đề, rõ ràng).Sự kiện jQuery trên iOS 5

Đi đoạn mã sau:

<!DOCTYPE html> 
<html lang="fr"> 
<head> 
    <meta charset="utf-8" /> 
    <script type="text/javascript" src="mmpa/jquery-1.6.4.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var $body = $('body'); 
      $('<button>').html('test jQuery').bind('touchstart', function() { alert('touchstart'); }).appendTo($body); 
     }); 
    </script> 
</head> 
<body> 
    <button ontouchstart="alert('touchstart');">test pure JS</button> 
</body> 
</html> 

Nút "tinh khiết JS" cho thấy cảnh báo trong iOS 4.3 và iOS 5, nhưng nút "jQuery" chỉ hoạt động trên iOS 4.3. Được thử nghiệm trên trình giả lập iPad/iPhone, 4.3 và 5; cũng được thử nghiệm trên iPhone 4.3 thực, iPhone 5.0 và iPad 5.0. Phản ứng tương tự nếu tôi sử dụng <input type="button"> hoặc thậm chí đơn giản <a> thay vì <button>.

Đây có phải là vấn đề liên quan đến jQuery như tôi tin không?

+0

không sử dụng bind ('touchstart') và ontouchstart = "". Sử dụng một trong số họ, và không thích sử dụng javascript nội tuyến. –

+1

Đó là một bằng chứng về khái niệm để cho thấy rằng JS nội tuyến hoạt động khi jQuery không. Tất nhiên tôi chưa bao giờ sử dụng JS nội tuyến trong mã thực. – Cyrille

+0

Tôi có thể tạo lỗi này với jQ 1.5.2 và sự kiện nhấp chuột, vì vậy có lẽ bạn nên sửa đổi tiêu đề thành "jQuery Events trên iOS 5" – webXL

Trả lời

8

Giải đáp của một chàng trai trên các diễn đàn dev Apple: Tôi cần phải ràng buộc() chỉ sau phần tử đã được thêm vào DOM, như vậy:

var btn = $('<a>').html('test jQuery').appendTo($body); 
btn.bind('touchstart', function(e) { alert('touchstart'); }); 
+2

Điều gì sẽ xảy ra nếu bạn sử dụng live() thay vì bind() ? Bất kỳ giải thích cho lý do tại sao nó ngừng hoạt động trong iOS 5? – Crashalot

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