2010-06-11 30 views
34

Khi tôi sử dụng jQuery cho một sự kiện nhấp chuột đơn giản, nó chỉ hoạt động đối với các liên kết. Có cách nào để làm cho nó hoạt động cho các khoảng thời gian vv:Làm cách nào để sử dụng jQuery cho sự kiện nhấp trong ứng dụng web iPhone

$("span.clicked").live("click", function(e){alert("span clicked!")}); 

$("a.clicked").live("click", function(e){alert("link clicked!")}); 

SPAN hoạt động trong Safari chứ không phải Mobile Safari (trên iPhone hoặc iPad) trong khi thẻ A hoạt động trong cả hai.

Trả lời

25

Bạn cần nghe các sự kiện "chạm" và "chạm". Thêm người nghe với jQuery ...

$('span').bind("touchstart", function(e){alert('Span Clicked!')}); 

Bạn có thể muốn nghe một touchstart và touchend để bạn có thể xác minh rằng phần tử mục tiêu khi ngón tay chạm vào cũng giống như các yếu tố nhắm mục tiêu khi các ngón tay đã được gỡ bỏ .

Tôi chắc rằng có lẽ là một cách tốt hơn để làm điều đó nhưng đó nên việc :)

Edit: Có một cách tốt hơn! Xem https://stackoverflow.com/a/4910962/16940

+0

Cảm ơn. Điều này có nghĩa là iPhone bỏ qua các sự kiện nhấp ngoại trừ các liên kết (có lẽ vì các cử chỉ khác có thể)? – Gazzer

+0

Bạn đang thiếu dấu đóng ngoặc đơn. Nên là $ ('span'). Bind ("touchstart", function (e) {alert ('Span Clicked!')}); – mhenry1384

102

Tôi cũng phải vật lộn với điều này. Sau rất nhiều đồ chơi xung quanh và cố gắng tìm ra vấn đề, tôi bắt gặp một giải pháp đơn giản.

Nếu bạn đặt phần tử cursor thành pointer của phần tử, nó sẽ hoạt động lại một cách kỳ diệu với sự kiện trực tiếp và sự kiện nhấp của Jquery. Điều này chỉ có thể được đặt trên toàn cầu trong CSS.

+1

Bạn đang tìm kiếm bản sửa lỗi như thế này trong nhiều tháng. Tôi đã đưa ra phát hiện iphone/pod/pad và thay đổi các sự kiện nhấp chuột cho các sự kiện khác chỉ dành cho các thiết bị đó. Thế này tốt hơn. – danmayer

+6

lưu ý rằng nó sẽ không hoạt động nếu bạn làm con trỏ 'cursor: pointer;' khi di chuột. – pseudosudo

+0

@pseudosudo bạn có thể xây dựng? không có di chuột trên một ipad - hoặc bạn đang nói về các phiên bản máy tính để bàn phá vỡ này trong một số khía cạnh, hoặc 'Samsung di chuột trên Galaxy S4'? –

18

Bạn thực sự không cần phải sử dụng touchstart hoặc sự kiện touchend, miễn là thẻ 'tuổi' (hoặc bất cứ điều gì khác hơn là một 'a' tag) có một tài sản css của:

cursor:pointer 

nhấp chuột sẽ đăng ký

1

Tôi đã thử mọi thứ và không có thủ thuật nào hoạt động. Hóa ra tôi không thể nhận được các sự kiện bấm vì tôi có một phần tử video dưới img của tôi. các yếu tố video dường như ăn các sự kiện nhấp chuột.

+0

Tôi có cùng một vấn đề. Thẻ video bên dưới là vấn đề. Bạn đã giải quyết điều này? –

+0

Tôi nghĩ rằng tôi đã kết thúc ẩn (hiển thị: không) phần tử video. Nó dường như là cách duy nhất. – mhenry1384

2

Bạn cũng có thể coax trình duyệt để tạo các sự kiện nhấp bằng cách thêm thuộc tính onclick trống. Đối với một cách tiếp cận đai-and-niềng răng trong trường hợp một trong hai cách tiếp cận ngừng hoạt động trong bất kỳ bản cập nhật iOS nhất định, bạn có thể sử dụng một cái gì đó như thế này:

$("span.clicked").live("click", function(e){alert("span clicked!")}) 
       .attr('onclick','') 
       .css('cursor','pointer'); 

(giả sử bạn không có bất kỳ onclick thực tế các thuộc tính bạn không nhớ phá hủy)

1

Bạn có thể thêm một sản phẩm nào onclick thuộc tính, như vậy:

<span onclick=''>Touch or Click Me</span> 
jQuery('span').live('click', function() { alert('foo'); }); 
Các vấn đề liên quan