2008-10-26 24 views
64

jQuery documentation cho biết thư viện đã tích hợp sẵn hỗ trợ cho các sự kiện sau: làm mờ, lấy nét, tải, thay đổi kích thước, cuộn, bỏ, nhấp, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, thay đổi, chọn , gửi, keydown, nhấn phím, khóa và lỗi.Làm thế nào để bạn xử lý oncut, oncopy, và onpaste trong jQuery?

Tôi cần xử lý các sự kiện đã cắt, sao chép và dán. Làm thế nào tốt nhất để làm điều đó? FWIW, tôi chỉ cần lo lắng về WebKit (may mắn cho tôi!).

CẬP NHẬT: Tôi đang làm việc trên "tiện ích" trong môi trường giống như Trang tổng quan. Nó sử dụng WebKit, vì vậy nó chỉ thực sự quan trọng (cho mục đích của tôi) cho dù những sự kiện này được hỗ trợ ở đó, mà nó trông giống như họ đang có.

+0

Trong nghiên cứu một chút cho câu trả lời này, tôi thấy rằng IE đã hỗ trợ cho việc đọc từ bộ nhớ tạm trong JavaScript (!!) thông qua 'window.clipboardData'. Firefox không, may mắn thay. Tôi nghi ngờ Webkit, hoặc là, sane. Bạn có chắc chắn rằng bạn thực sự cần xử lý các lệnh cắt/sao chép/dán không? Có lẽ bạn đang tiếp cận vấn đề từ góc độ sai. Nếu bạn chỉnh sửa câu trả lời của bạn để cung cấp lý do đằng sau yêu cầu của bạn, có lẽ tôi hoặc người khác có thể giúp bạn nhiều hơn. –

+0

Vì vậy, jQuery không tài liệu hỗ trợ một phần sau đó, tôi có nghĩa là cho các sự kiện như dán và sao chép. – ars265

Trả lời

89

Bạn có thể thêm và loại bỏ các sự kiện của bất cứ loại nào bằng cách sử dụng các .on()off() phương pháp

Hãy thử điều này, ví dụ

jQuery(document).on('paste', function(e){ alert('pasting!') }); 

jQuery là thực sự khá thờ ơ với việc loại sự kiện bạn gán được hỗ trợ bởi trình duyệt, do đó bạn có thể chỉ định các loại sự kiện tùy ý cho các phần tử (và các đối tượng chung) như:

jQuery('p').on('foobar2000', function(e){ alert(e.type); }); 

Trong trường hợp các loại sự kiện tùy chỉnh, bạn phải .trigger() chúng "theo cách thủ công" trong mã của bạn, như sau:

jQuery('p').trigger('foobar2000'); 

Gọn gàng?

Hơn nữa, để làm việc với các sự kiện DOM độc quyền/tùy chỉnh theo cách tương thích trình duyệt chéo, bạn có thể cần sử dụng/viết "plugin sự kiện jQuery" ... ví dụ có thể được xem trong jquery.event.wheel.js Brandon Aaron's Mousewheel plugin

+0

Liên kết bị hỏng: 'off' và' jquery.event.wheel.js'. –

+1

.Liên kết ngoại tuyến là OK và jquery.event.wheel.js được đánh dấu ' 'đã được khắc phục nhưng bị bỏ lại vì lý do lịch sử. –

14

Sự kiện clipboard khác nhau có sẵn trong Javascript, mặc dù hỗ trợ là điểm yếu. QuicksMode.org có compatibility gridtest page. Các sự kiện không được tiếp xúc thông qua jQuery, vì vậy bạn sẽ phải mở rộng thư viện hoặc sử dụng các sự kiện Javascript gốc.

7

Mozilla hỗ trợ sự kiện "đầu vào" mà tôi gặp khó khăn khi tìm tài liệu hữu ích. Ít nhất, tôi biết nó cháy trên dán.

this.addEventListener('input', 
    function(){//stuff here}, 
    false 
    ); 
+1

Cảm ơn, Josh. Điều này dường như làm việc trong FF và IE. '$ ('# myinput'). Bind ('input', function() {my_immediate_response_function();});' –

+0

Dường như hoạt động tốt trong FF, IE, Chrome và Safari! Siêu, cảm ơn. –

+3

Trong IE 9, sự kiện đầu vào không kích hoạt nếu bạn xóa văn bản (bằng bàn phím hoặc nhấp chuột phải | Cắt). Trong Chrome và FF nó có. Làm tốt lắm, Microsoft! –

1

Như jQuery 1.7, bạn có thể sử dụng bind (...)unbind (...) phương pháp để gắn và gỡ bỏ lần lượt xử lý.

Dưới đây là những ví dụ sắp xếp questuion của bạn:

$('#someElementId').bind('paste', function(){return false;}); 

- một trong những điều này sẽ ngăn chặn bất kỳ nỗ lực để dán từ clipboard vào cơ thể yếu tố.Bạn có thể sử dụng cũng cắt, sao chép và những người khác như các loại sự kiện (xem liên kết rống lên)

$('#someElementId').bind('copy', function(){return alert('Hey fella! Do not forget about copyrights!');}); 

Vì vậy, trong trường hợp khác, khi bạn muốn loại bỏ những bộ xử lý, bạn có thể sử dụng unbind() phương pháp:

$('#someElementId').unbind('copy'); 

Dưới đây một số liên kết hữu ích:

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