web-dev-qa-db-fra.com

JavaScript ONPASTRED

J'ai cela maintenant:

<input type="text" placeholder="Paste text" onPaste="alert(this.value);">

Cela affecte un travail, sauf, il renvoie une fenêtre d'alerte vierge. Je n'ai aucune valeur. Aider?

17
Jake

Les incendies onpaste avant le input 's value est modifié. Vous avez besoin de quelque chose comme a setTimeout :

<input type="text" placeholder="Paste text" onPaste="var e=this; setTimeout(function(){alert(e.value);}, 4);">​

Je stocke une référence à this à l'intérieur d'un Var global comme this n'est pas accessible dans le cadre d'une fonction de délai d'attente qui est connectée à l'objet Window.

J'utilise 4 milisecondes comme timeout car il s'agit du minimum d'intervalle/délai d'attente valide dans la spécification HTML5. Modifier: Comme indiqué dans les commentaires, vous pouvez également utiliser 0 Milisecondes comme délai d'attente qui est automatiquement recalculé sur 4. ( Tests JSPERF .

((( FIDDLE

Vous pouvez également utiliser un appel de fonction à l'intérieur de votre onpaste _ _ this comme paramètre pour empêcher tout mélange HTML avec JS Trop. :)

Et voici une fonction plus facile à lire et que vous pouvez utiliser dans plusieurs entrées:

function pasted(element) {
    setTimeout(function(){
        alert(element.value);
    }, 0); //or 4
}​

Ce qui peut être appelé simplement onPaste="pasted(this)" pour toute entrée.

((( FIDDLE

44
Fabrício Matté

Ceci est parce que les incendies onpaste avant Le contenu est collé dans l'élément ( link ). Pas encore au moment où vous le gérez.

Les navigateurs modernes prennent en charge les méthodes d'obtention de données de presse-papiers à l'intérieur du gestionnaire d'événements. Reportez-vous à JavaScript Obtenir des données de presse-papiers de presse-papiers sur Coller (navigateur croiseur) pour tentatives de solution croisée croisée.

De plus, vous pouvez toujours contourner votre problème en démarrant simplement une minuterie dans la fonction de gestionnaire d'événements (10 ms devrait suffire) de vérifier votre valeur d'entrée ultérieurement.

9
Dmitry Pashkevich