2011-12-19 10 views
5

Tôi cố gắng để làm cho textbox tương tự như Twitter, cho điều này tôi đã viết mã choTại sao Dán Sự kiện trong đám cháy jquery khi dán trước?

  • Word Count
  • sử dụng sự kiện thay đổi, KeyUp và Dán

KeyUp và Thay đổi Sự kiện đang hoạt động tốt nhưng sự kiện dán hơi lạ, khi tôi dán nội dung nào đó vào văn bản, số lượng từ không thay đổi tại thời điểm đó, sau khi gỡ lỗi, tôi thấy rằng sự kiện dán cháy trước khi dán nội dung nào đó vào hộp văn bản. Tôi không biết họ xử lý thế nào trong Twitter. Đây là mã của tôi: sự kiện:

'click #textboxId' : 'submitQuestion' 
'keyup #textboxId' : 'wordCounter' 
'change #textboxId' : 'wordCounter' 
'paste #textboxId' : 'wordCounter' 

wordCounter: -> 
    #Code for Word Count# 

Do trước dán bản chất của sự kiện này dán đếm công việc không thay đổi về trường hợp đó.
Đề xuất và trợ giúp của bạn sẽ được đánh giá cao, Cảm ơn bạn đã dành thời gian.

+0

không thay đổi xử lý sự kiện tất cả các trường hợp này – aWebDeveloper

+0

@WebDeveloper Không, thay đổi sự kiện không cập nhật đếm trên dán (ngay), chúng tôi phải nhấp vào hộp văn bản sau khi dán nội dung nào đó. –

+0

@WebDeveloper - sự cố là nút chuột phải hoặc dán thanh công cụ. Tôi đã thực sự ngạc nhiên khi sự kiện 'change' không bắt được sự kiện này. – mrtsherman

Trả lời

8

Xem ví dụ này.

http://jsfiddle.net/urEhK/1

$('textarea').bind('input propertychange', function() { 
    $('#output').html($(this).val().length + ' characters'); 
}); 

hành vi đó là rất lạ. Bạn sẽ nghĩ rằng một trong những sự kiện đó sẽ bắt được điều này đúng không? Tôi đã rất ngạc nhiên khi không có thêm câu trả lời cho điều này thông qua Google.

+0

Sự kiện thay đổi chỉ được kích hoạt khi bạn rời khỏi trường (tabbing hoặc nhấp vào nó). – nnnnnn

+0

@mrtsherman - Cảm ơn. Tôi đã thử thay đổi sự kiện trước đó và có lạ của nó rằng sau khi dán trong hộp văn bản đếm chỉ thay đổi khi tôi nhấp vào bên ngoài hộp. Trên thực tế khi nó không được làm việc để tìm thấy một nơi nào đó mà dán sự kiện có thể xử lý này, nhưng kết quả là như nhau. Dù sao, tôi sẽ thử lại bằng cách sử dụng sự kiện Thay đổi và khóa. Cảm ơn một lần nữa. –

+0

@nnnnnn - Bạn đúng. – mrtsherman

2
function update()  
    { 
     alert($textbox.val().length); 
    } 


    var $textbox = $('input'); 
    $textbox.bind('keyup change cut paste', function(){ 
     update(); //code to count or do something else 
    }); 
    // And this line is to catch the browser paste event 
    $textbox.bind('input paste',function(e){ setTimeout(update, 250); }); 
+0

@ WebDeveloper- Chỉ khác biệt về cú pháp thay đổi là có trong coffeescript không có gì khác. Cảm ơn. –

+0

đã làm việc nếu nó đã bỏ phiếu của tôi như là câu trả lời đúng – aWebDeveloper

0

Bây giờ bạn nên sử dụng() thay vì liên kết() see this post. Nó cũng không cần thiết để tạo ra một hàm được đặt tên, bạn chỉ có thể tạo một hàm ẩn danh.

$('#pasteElement').on('paste', function() { 
    setTimeout(function(){ 
     alert($('#pasteElement').val()); 
    }, 100); 
}); 
0

Bạn có thể làm một việc trước hết là lấy dữ liệu gốc. sau đó bạn có thể lấy dữ liệu dán sự kiện và thêm chúng.

$("#id").on("paste keypress ",function(event){ 
       // eg. you want to get last lenght 
       var length=$("#id").val().length; 
       if(event.type == "paste"){ 
        //then you can get paste event data.= 

length+=event.originalEvent.clipboardData.getData('text').length; 
       } 


      });` 
+0

mã là tốt nhất cho sao chép dán sự kiện giới hạn từ và hạn chế giới hạn của từ. – Bachas