2012-10-12 27 views
5

Trải qua hành vi kỳ lạ và đoàn sự kiện hoạt động phi trong iOS6, gốc rễ trong số đó là nếu tôi chỉ cần đính kèm một event handler để document.body, như vậy:bấm nghe sự kiện gắn liền với document.body không cháy trong iOS6?

document.body.addEventListener("click", function(){alert("ios6 sucks")}, false); 

doesnt này được chạy, ví dụ nếu tôi truy cập google.com và thêm thông qua safari websepector từ xa. Trong một số trường hợp nó sẽ chạy, bao gồm nếu tôi nhấp vào một liên kết trên trang hoặc nếu nhấp vào một phần tử có trình xử lý sự kiện được đính kèm trực tiếp vào nó. Các công trình tương tự tốt trong các trình duyệt chính và trên iOS 5 và 4. Thêm touchend vào cơ thể sẽ kích hoạt như nó cần và có thể là một giải pháp tiềm năng nhưng thực sự thích hợp hơn để cho trình duyệt phát hiện các nhấp chuột thay vì phải lập trình một số phát hiện nhấp chuột trong touchstart/touchend. Tôi tự hỏi nếu đây là lỗi iOS6. nhưng tôi havent thấy bất cứ ai khác phàn nàn về điều này được nêu ra.

+0

theo các phát hiện của tôi, nếu tôi đính kèm trình xử lý nhấp chuột vào div nằm một mình dưới dạng con trực tiếp của cơ thể, gói toàn bộ trang, sau đó sẽ hoạt động. Và như một tác dụng phụ, điều đó cũng sẽ kích hoạt trình kích hoạt sự kiện nhấp cơ thể ... nếu không có sự kiện nào được gắn với div con, thì trước khi không có trình kích hoạt sự kiện nào trên cơ thể. – bonklers

Trả lời

0

@Bonkers ... Tham khảo lý do tại sao nhấp chuột trên cơ thể được kích hoạt sau khi đính kèm sự kiện nhấp chuột vào div chỉ là do sự kiện sôi nổi.

tôi sao chép mã của bạn ở đây cho thấy rằng nó được gọi là hai lần trên div nhưng chỉ một lần trên cơ thể:

<div id="myDiv">FlackAttack Test</div> 

<script> 
document.body.addEventListener("click", function(){alert("ios6 sucks")}, false); 
document.getElementById('myDiv').addEventListener('click', function(){alert("ios6 sucks twice")},  false); 
</script> 

Nếu bạn muốn dừng sự kiện từ bọt, bạn có thể gọi e.stopPropagation() ; hoặc e.cancelBubble = true;

+0

Vâng, đó là tốt nhưng thats không phải là lỗi, lỗi là người nghe gắn liền với cơ thể doesnt phản ứng. Trong khi iOS5 thì có. – bonklers

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