2010-02-11 47 views
13

Tôi phải thực hiện sự kiện dán của vùng văn bản bằng cách sử dụng JQuery. Tôi đã thử đoạn mã sau nhưng nó không làm việc ...Ghi văn bản được dán vào vùng văn bản với JQuery

$(document).ready(function() 
{ 
    $('#txtcomplaint').keyup(function() 
    { 
    TextCounter('txtcomplaint','counterComplaint', 1000); 
    }) 
    $('#txtcomplaint').onpaste(function() 
    { 
    alert() 
    //TextCounter('txtcomplaint','counterComplaint', 1000); 
    }) 
}); 

Trả lời

21

Bạn có thể làm một cái gì đó như thế này

$("#txtcomplaint").bind('paste', function(e) { 
    var elem = $(this); 

    setTimeout(function() { 
     // gets the copied text after a specified time (100 milliseconds) 
     var text = elem.val(); 
    }, 100); 
}); 
+0

Phương pháp này hoạt động nếu bạn nhấn Ctrl + V để dán. Nhưng nó không hoạt động nếu bạn click chuột phải và chọn Paste. – JohnnyLinTW

+6

Tôi tìm thấy nếu thay đổi thành $ ("# txtcomplaint"). Bind ('paste', null, function (e) ... và nó hoạt động tốt cho Ctrl + V và dán chuột. – JohnnyLinTW

6
$('#txtcomplaint').bind('paste', function(e){ alert('pasting!') }); 

Đối với tài nguyên bổ sung có một cái nhìn here.

+0

Bạn sẽ không nhận được văn bản được sao chép bằng phương pháp này. – rahul

+0

@rahul: Anh ấy chỉ muốn sử dụng sự kiện này để đếm văn bản. –

1

cuối cùng tôi nhận được điều này để làm việc cho 1) đánh máy, 2) kéo và thả, 3) Ctrl-V và 4) dán từ menu ngữ cảnh của một con chuột nhấp chuột, nhưng tôi đã phải đính kèm dán và thả xử lý các tài liệu (nơi 'taValue' là lớp của textareas tôi đang cố gắng để theo dõi):

 $(document).on("paste drop", '.taValue', function (e) { 
      myHandler.call(e.target, e); 
     }); 

sự kiện KeyUp trên textarea đã từng làm việc. Vấn đề tiếp theo là các sự kiện dán và thả được kích hoạt TRƯỚC KHI văn bản trong vùng văn bản thực sự thay đổi. Trong trường hợp của tôi, tôi muốn so sánh văn bản mới với văn bản gốc. Tôi đã sử dụng một setTimeout:

function myHandler(e) { 
     if (e && (e.type === "drop" || e.type === "paste")) { 
     var me = this; 
     setTimeout(function() { myHandler.call(me) }, 200); 
     }... [more code to do the comparison] 

Tôi ghét sử dụng hết thời gian cho những việc như thế này nhưng nó hoạt động (khi tôi thử khoảng 100ms).

0

Đây là giải pháp hữu ích nhất:

$("#item_name").bind("input change", function() {}); 

có thể thay đổi là không cần thiết.

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