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.