Javascript OnPaste

Je l'ai maintenant:

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

Cela fonctionne en fait, sauf qu'il renvoie une fenêtre d'alerte vierge. Je n'obtiens aucune valeur. Aidez-moi?

L'événement onpaste déclenche avant que la value l' input value soit modifiée. Vous avez besoin de quelque chose comme un setTimeout :

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

Je stocke une référence à this dans une var globale, car this n'est pas accessible dans le cadre d'une fonction de temporisation qui est attachée à l'objet de fenêtre.

J'utilise 4 mille secondes comme délai, car c'est l'intervalle / timeout minimum valable dans la spécification HTML5. Modifier: Comme indiqué dans les commentaires, vous pouvez également utiliser 0 milles-secondes comme timeOut qui est automatiquement recalculé sur 4 . Tests jsPerf .

Violon

Vous pouvez également utiliser un appel de fonction dans votre événement onpaste en passant this comme paramètre pour empêcher votre 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é avec simplement onPaste="pasted(this)" pour toute entrée.

Violon

C'est parce que l'événement onpaste déclenche avant que le contenu ne soit collé dans l'élément ( lien ), de sorte qu'il n'y a pas encore au moment où vous le manipulez.

Les navigateurs modernes prennent en charge les méthodes d'obtention des données du presse-papier dans le gestionnaire d'événements. Reportez-vous à JavaScript pour obtenir les données du presse-papier sur l'événement de pâte (Cross Browser) pour les tentatives de solution de navigateur croisé.

En outre, vous pouvez toujours contourner votre problème en commençant simplement une minuterie dans la fonction de gestionnaire d'événements (10 ms devrait être suffisant) afin de vérifier votre valeur d'entrée plus tard.