2009-11-02 8 views
5

Napisałem licznik znaków jQuery, działa on po wpisaniu, ale nie po wklejeniu tekstu. Funkcja jest wykonywana po wklejeniu, ale liczba nie zmienia się. Nie jestem pewien, czy funkcja val() jest poprawna czy naprawdę zsynchronizowana z DOM. Jakieś pomysły?jQuery - licznik znaków nie działa z wydarzeniem wklejania

counter = function() { 
    $j("strong#status-field-char-counter").text($j("#Panel1messagesmessage").val().length); 
    alert('event'); 
}; 


$j("textarea").keyup(counter); 
$j("textarea").bind('paste', counter); 
$j("#Panel1messagesmessage").bind('copy', counter); 
$j("#Panel1messagesmessage").bind('delete', counter); 
+0

'pasta' nie jest wymieniony jako ważnego wydarzenia w http://docs.jquery.com/Events/bind również ... można dodawać zdarzenia jako drugi parametr 'bind()' jako ciąg znaków z każdym zdarzeniem oddzielonym spacją '$ ('# selector'). bind (" kliknięcie kursorem myszy ", function() {})' – artlung

+0

Oto pytanie SO adresujące nieobsługiwane zdarzenia: http://stackoverflow.com/questions/237254/how-do-you-handle-oncut-oncopy-and-onpaste-in-jquery – artlung

Odpowiedz

7

zawartość textarea można zmieniać na wiele sposobów, zamiast próbować je złapać wszystko, wystarczy zainstalować procedurę, która sprawdza zawartość co 0,5 sekundy, jak

$(function() { 
    window.charCount = 0; 
    setInterval(function() { 
     var c = $("textarea").val().length; 
     if(c != window.charCount) { 
     window.charCount = c; 
     $("span").html(window.charCount); 
     } 
    }, 500); 
}) 
3

Zwykle używam keyup w połączeniu z change

Zdarzenie change jest wywoływane, gdy pole tekstowe traci fokus, ale tylko wtedy, gdy wartość została zmodyfikowana, ponieważ otrzymała fokus.

+0

I d id spróbuj z 'keydown', ale' keyup' wydaje się dobrze poradzić, bardzo dobrze dla _paste_. – Irfan

2

Szybka gra o:

$("#textarea").change(function() { 
      $("#status-field-char-counter").text($("#textarea").val().length); 
    }).keyup(function() { 
     $("#status-field-char-counter").text($("#textarea").val().length); 
    }); 

HTML

<p id="status-field-char-counter">here</p> 
<input id="textarea" type="text" />