2010-02-11 5 views
13

Ich muss das Einfügen-Ereignis eines Textbereichs mit JQuery. Ich habe den folgenden Code versucht, aber es funktioniert nicht ...Erfassen von Text eingefügt in ein Textfeld mit JQuery

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

Antwort

21

Sie können wie etwas tun diese

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

Diese Methode funktioniert, wenn Sie zum Einfügen STRG + V drücken. Aber es funktioniert nicht, wenn Sie mit der rechten Maustaste klicken und Einfügen auswählen. – JohnnyLinTW

+6

Ich habe gefunden, wenn zu $ ​​ändern ("# txtcomplaint"). Bind ('einfügen', null, function (e) ... und es funktioniert gut für Strg + V und Maus einfügen. – JohnnyLinTW

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

Für zusätzliche Ressource einen Blick here.

+0

Sie werden den kopierten Text nicht mit dieser Methode erhalten. – rahul

+0

@rahul: Er möchte nur dieses Ereignis für Text zählen Schweinswale. –

1

ich das endlich für 1) Typisierung zu arbeiten, 2) per Drag & Drop, 3) Ctrl-V und 4) fügen Sie aus dem Kontextmenü einer Maus Klicke, aber ich hatte die Paste zu befestigen und Handler auf das Dokument fallen (wobei ‚taValue‘ die Klasse der Textbereiche, die ich zu überwachen bin versucht):

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

die keyup Veranstaltung auf dem Textfeld bereits gearbeitet. Das nächste Problem bestand darin, dass die Ereignisse "Einfügen" und "Löschen" ausgelöst werden, BEVOR der Text im Textbereich tatsächlich geändert wird. In meinem Fall wollte ich den neuen Text mit dem Originaltext vergleichen. Ich griff zu einem 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] 

Ich hasse Timeouts für Dinge wie diese verwenden, aber es funktioniert (wenn ich ein 100ms Intervall versucht, es nicht).

0

Dies ist die nützlichste Lösung:

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

vielleicht ist nicht wesentlich ändern.