2011-06-18 3 views
7

Je trouve que lorsque le texte du collage (c.-à-Hello) à l'aide de la souris, la fonction suivante jeter un pop-up vide:Est-il possible d'obtenir du texte collé sans utiliser la fonction setTimeout()?

$('input:text').onpaste = function() 
{ 
    alert($('input:text').val()); 
}); 

La chose est, lorsque l'événement onpaste est tiré, le texte ne mais réellement collé au champ d'entrée (au moins c'est ma conjecture). Donc changer la fonction de:

$('input:text').onpaste = function() 
{ 
    setTimeout(function() 
    { 
     alert($('input:text').val() 
    }, 100); 
} 

donne un résultat correct en montrant une fenêtre avec le texte Hello lorsqu'il est collé dans le champ d'entrée.

Maintenant ma question: est-il possible d'attraper le texte collé sans utiliser la fonction setTimeout()? Cette solution de contournement semble assez sale, donc j'aimerais ne pas avoir à l'utiliser.

kkthxbai xon1c

+0

http://stackoverflow.com/a/19269040/530153 –

Répondre

11

vous pouvez utiliser le lieu événement oninput, les navigateurs modernes prennent en charge cette méthode

http://jsfiddle.net/pxfunc/KDLjf/

$('input').bind('input', function(e) { 
    console.log($(this).val()); 
}); 
+1

Comment puis-je vérifier si l'entrée était une pâte? – user3281466

0

essayer d'obtenir les données collées:

$("input:text").bind('paste', function(e) { 
    var text = e.event; 
    alert(text); 
}); 

Le délai d'attente est nécessaire pour obtenir la mise à jour dom si la valeur est en fait dans le champ de saisie. vous pouvez également utiliser l'événement de changement pour vérifier si la zone de saisie est mis à jour http://api.jquery.com/change

+3

Je suis "non défini" dans l'alerte, pourriez-vous donner un exemple? – Diego

1
$('input:text').bind('paste', function() { 
    alert($(this).val()); 
}); 
+0

Ce code ne fonctionne pas, car la valeur collée n'a pas encore été définie dans l'entrée. J'ai testé en utilisant Chrome. –

0

Je don Je pense que le code ci-dessous fonctionne sur IE8 car la valeur d'entrée n'est pas modifiée lorsque alert() est exécuté.

$('input').bind('input paste', function(e) { 
    alert($(this).val()); 
}); 

sur Firefox et Chrome, cela fonctionne très bien.

Questions connexes