Khi tôi chạm chính xác trên đường viền của thành phần thẻ a
, nó kích hoạt sự kiện click
, chứ không phải sự kiện touchstart
. Tại sao chuyện này đang xảy ra?Cách ngăn chặn nhấp chuột "ma" trên siêu liên kết khi chạm vào thiết bị cảm ứng
Để hiển thị các vấn đề tôi đã fiddle này: http://jsfiddle.net/o8cvqL0L/8/ các a
thẻ có 2 sự kiện:
$('#yellow').on('touchstart', function(e) {
alert('touch');
e.preventDefault();
});
$('#yellow').on('click', function(e) {
alert('click');
});
Chỉ cần làm cho một liên lạc chính xác trên biên giới của các yếu tố màu vàng. Có cách nào để tránh hành vi này không?
Tôi đã thử nghiệm điều này trên Trình duyệt Android, Safari và Chrome dành cho máy tính để bàn.
Cảm ơn bạn rất nhiều!
CHỈNH SỬA: Chạm phải nằm ngoài phần tử nhưng vẫn nằm trong bán kínhX/Y của Touch để trở thành lần nhấp. Giá trị của clientX/Y và pageX/Y trong trình nghe click
không đúng, hiển thị các tọa độ allways tương ứng với phần tử khi không phải vậy. (http://jsfiddle.net/o8cvqL0L/35)
Có thùng chứa với touchstart
người nghe dường như làm cho những hành vi kỳ lạ này trong phần tử con biến mất và tọa độ trong đối tượng sự kiện là đúng. (http://jsfiddle.net/o8cvqL0L/42/) Sau đó, việc sử dụng ủy quyền sự kiện sẽ khắc phục sự cố, NHƯNG chỉ khi phần tử đích là div
và không phải là liên kết như trong ví dụ trước của tôi. Dưới đây là giải pháp cho các yếu tố div
: http://jsfiddle.net/o8cvqL0L/44/
Tôi vẫn đang tìm giải pháp cho các thẻ a
và lý do được giải thích cho vấn đề này.
Dường như cũng xảy ra việc chạm nhẹ vào phần tử bên cạnh. – Sadako