2009-11-02 12 views
5

Ho scritto un contatore di caratteri jQuery, funziona quando digito, ma non quando il testo viene incollato. La funzione viene eseguita su incolla, ma il conteggio non cambia. Non sono sicuro che la funzione val() sia corretta o realmente sincronizzata con DOM. Qualche idea?jQuery - Il contatore char non funziona con l'evento paste

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

'paste' non è elencato come un evento valido http://docs.jquery.com/Events/bind ... anche , puoi aggiungere eventi come secondo parametro di 'bind()' come una stringa con ogni evento separato da uno spazio '$ ('selettore #'). bind ('click mouseover', function() {})' – artlung

+0

Ecco una domanda SO relativa agli eventi non supportati: http://stackoverflow.com/questions/237254/how-do-you-handle-oncut-oncopy-and-onpaste-in-jquery – artlung

risposta

7

contenuti textarea possono essere modificati in vari modi, invece di cercare di catturarli tutti, è sufficiente installare una routine che controlla il contenuto di ogni 0,5 secondi, come

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

io di solito uso keyup in combinazione con change

L'evento change si attiva quando la casella di testo perde lo stato attivo, ma solo se il valore è stato modificato dal momento in cui ha ricevuto lo stato attivo.

+0

I d prova una cosa con 'keydown', ma' keyup' sembra fare bene il trucco, anche per _paste_. – Irfan

2

gioco veloce su:

$("#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" />