Tôi đang sử dụng event.stopPropagation()
trong đơn đăng ký của mình. Đã xuất hiện, tuy nhiên, một kịch bản mà tôi muốn tuyên truyền tiếp tục như thể các chức năng nói trên chưa bao giờ được gọi. Vì vậy, tôi tự hỏi; có cách nào để "tiếp tục" tuyên truyền sau khi nó được dừng lại? Sẽ thật là tẻ nhạt khi di chuyển một cuộc gọi đến event.stopPropagation
đến một chục câu lệnh có điều kiện riêng biệt.Làm cách nào để hoàn tác event.stopPropagation trong jQuery?
Trả lời
Sau khi tuyên truyền đã được dừng lại, nó không thể được tiếp tục. Là một workaround, những gì bạn có thể làm là thiết lập một biến, và sau đó chỉ dừng lại nếu biến này là đúng:
var stop = false;
// do your logic here
if(stop){
event.stopPropagation();
}
Đặt cuộc gọi event.stopPropagation()
bên trong điều kiện của bạn. Ví dụ:
$el.click(function(event) {
if (some_condition) {
event.stopPropagation()
// do stuff
}
else {
// do other stuff, without stopping propagation
}
});
Tẻ nhạt nó có thể xảy ra, nhưng tiếc là dừngPropagation là công tắc một chiều. Khi đã dừng, bạn không thể bật lại cho cùng một sự kiện.
Nó không phải là "a" điều kiện. Đó là ** rất nhiều điều kiện. Tự xưng mình: "Sẽ rất khủng khiếp khi di chuyển một cuộc gọi đến event.stopPropagation đến một chục câu lệnh điều kiện riêng biệt" – Hubro
Tẻ nhạt nó có thể xảy ra, nhưng tiếc là 'stopPropagation' là một công tắc một chiều. Khi đã dừng, bạn không thể bật lại cho cùng một sự kiện. –
Bây giờ ** rằng ** là câu trả lời tôi đang tìm kiếm. Vì điều đó thực sự trả lời câu hỏi của tôi, tôi sẽ chấp nhận câu hỏi đó nếu bạn chỉnh sửa – Hubro
Chỉ cần cấu trúc lại sự kiện ban đầu của bạn như thế này:
var refEvent = event.originalEvent;
refEvent.cancelBubble = false;
refEvent.defaultPrevented = false;
refEvent.returnValue = true;
refEvent.timeStamp = (new Date()).getTime();
if (event.target.dispatchEvent){
event.target.dispatchEvent(refEvent);
} else if (event.target.fireEvent) {
event.target.fireEvent(refEvent);
}
Bạn có thể cung cấp ví dụ làm việc về sự kiện bị dừng với e.stopPropagation() và sau đó khởi động lại với ví dụ trên không? Tôi không thể làm cho nó hoạt động được, nhưng có vẻ đúng theo lý thuyết. – gfullam
Dưới đây là một giải pháp hoạt động:
$('#mydiv').on('click.new', function(e){
e.stopImmediatePropagation();
alert('this will happen only once');
$('#mydiv').unbind('click.new');
});
Nó sử dụng thực tế sự kiện có thể có không gian tên tùy chỉnh và có thể hủy liên kết. Nó cũng hoạt động cho e.stopPropagation
. Đối với vấn đề đó, nó có thể hoàn tác mọi thứ liên quan đến sự kiện nhấp chuột tùy chỉnh đó.
- 1. jquery Event.stopPropagation() dường như không hoạt động
- 2. Làm cách nào để tạo "hoàn tác" trong C++?
- 3. Làm cách nào để hoàn tác cuộc gọi Object.defineProperty?
- 4. Làm cách nào để hoàn tác một git svn dcommit?
- 5. Làm cách nào để hoàn tác `hg pull`?
- 6. Làm cách nào để hoàn tác hg init?
- 7. Làm cách nào để triển khai chức năng hoàn tác?
- 8. Làm cách nào để thực hiện thao tác 'hoàn tác' trong ứng dụng cửa sổ .net?
- 9. jQuery cách hoàn tác thay đổi đã chọn
- 10. Làm cách nào để đẩy thao tác lên ngăn xếp hoàn tác Excel?
- 11. làm thế nào để hoàn tác cập nhật git submodule
- 12. Làm thế nào để hoàn tác một cuộn Git
- 13. Hoàn tác/Làm lại trong WPF?
- 14. Cách hoàn tác bzr thêm
- 15. Làm thế nào để hoàn tác công việc của tinyMCE?
- 16. event.preventDefault vs event.stopPropagation
- 17. cách hoàn tác cam kết
- 18. mẫu để thực hiện hoàn tác/làm lại trong clojure
- 19. Làm cách nào để chỉnh sửa/hoàn tác/xóa mục nhập từ .svnignore trong Eclipse?
- 20. Làm cách nào để hoàn tác kiểm tra trong TFS cho nhân viên cũ
- 21. Làm cách nào để hoàn tác chế độ xem chia tách trong VS2013?
- 22. Làm cách nào để đợi các tác vụ không đồng bộ hoàn thành trong scala?
- 23. Làm cách nào để hoàn tác khôi phục changeset trong TFS 2010?
- 24. Làm cách nào để triển khai hoàn tác trong ứng dụng vẽ OpenGL ES trên iPhone?
- 25. Làm cách nào để kích hoạt hoàn tác trong trình chỉnh sửa kiến eclipse?
- 26. Làm cách nào để hoàn tác "Phạm vi này" trong Visual Studio 2012?
- 27. TortoiseSVN - Hoàn tác hoàn nguyên
- 28. Làm cách nào để hoàn thành ThreadPool.Join?
- 29. Hoàn tác xóa trong GIT
- 30. Làm cách nào để xóa hoàn toàn tác vụ và chỉ để lại hoạt động mới?
Mmmm ... http: //stackoverflow.com/questions/4735006/javascript-how-to-enable-stoppropagation – elclanrs
Nếu có cơ sở như vậy, bạn sẽ không cần hàng tá câu lệnh có điều kiện để quyết định xem bạn có nên gọi nó? – Jon
Họ đã ở đó. Sẽ có một cuộc gọi đến 'event.stopPropagation()' và (hiếm khi) một cuộc gọi đến 'event.resumePropagation() giả định'. Điều đó sẽ thích hợp hơn khi gọi 'event.stopPropagation()' trong tất cả các điều kiện ngoại trừ một số – Hubro