2010-11-04 24 views
3

J'ai une fonction Javascript qui est associée à un événement onChange. Je comprends que certains navigateurs prennent en charge onPaste au niveau du document ou d'un élément. Existe-t-il un moyen de déterminer si l'événement onChange a été causé par un "paste"? J'ai essayé d'ajouter une var globale qui est définie quand onPaste est déclenché, puis de le réinitialiser à la fin de ma routine onChange, mais il n'y a aucune garantie La fonction onPaste est appelée avant onChange.Comment déterminer si un événement onChange a été appelé par un onPaste

+0

L'événement 'change' ne se déclenche que lorsqu'un champ de texte est flou. Il est impossible de savoir ce qui l'a déclenché si plusieurs changements sont survenus. – eyelidlessness

Répondre

0

Je ne pense pas que vous serez en mesure de le faire universellement. Voir le current state de tester cette fonctionnalité. Une façon de détecter une pâte consisterait à compter le temps entre les "appuis" une fois qu'un champ a le focus.

1

Cela a bien fonctionné pour moi:

<input type="text" onchange="ValueChanged(event, this);" onpaste="this.setAttribute('pasted', '1');"/> 


<script type="text/javascript"> 
function ValueChanged(evt, sender) { 
    var blnCameFromPaste = ((sender.getAttribute("pasted") || "") == "1"); 
    if (blnCameFromPaste) 
     alert("changed by paste"); 
    else 
     alert("changed without paste"); 
    sender.setAttribute("pasted", "0") 
} 
</script> 
+0

Cela a fonctionné pour vous sur quel navigateur/version? –

+0

IE8 et Chrome 7. –

1

Vous pouvez utiliser onKeyPress/onKeyUp/onKeyDown/onpaste au lieu de onChange.

+1

Et vous pouvez également utiliser l'événement 'input'. Et 'input' est supporté par tous les navigateurs sauf IE, ce qui peut être fait pour le simuler de manière très efficace en utilisant l'évènement' propertychange'. En plus de capturer quelle touche est enfoncée, l'événement 'input' /' propertychange' fait tout ce dont vous avez besoin avec les événements clés. – eyelidlessness

0

Chaque fois que vous voyez un événement onchange, comparez la longueur actuelle de la valeur du champ à la longueur précédente, et l'heure actuelle à l'heure précédente. Si les caractères ont été saisis plus vite qu'une personne pourrait les taper, ils doivent avoir été collés.