2009-02-13 7 views
1

J'ai lu dans l'article (the article) suivant des concepts sur les gestionnaires d'événements:Comment attraper événement après l'action par défaut a été réalisée en JavaScript

Pour un événement non-bulles, la séquence de l'expédition est comme ceci:

  1. Phase de capture: toutes les « capture » gestionnaires d'événements sont tirés sur tous les éléments ancêtres , du haut vers le bas .
  2. L'événement est déclenché sur la cible élément , ce qui signifie que tous les événements gestionnaires inscrits sur l'élément pour l'événement spécifique sont exécutées (dans undefined!)
  3. L'action par défaut est exécutée (si il n'a pas été annulé dans l'un des gestionnaires )

Pour un événement de formation de bulle, la séquence est comme ceci:

  1. Phase de capture: tous les gestionnaires d'événements «capturant» sont déclenchés sur tous les éléments ancêtres , à partir du haut .
  2. L'événement est déclenché sur l'élément cible
  3. bullage phase: L'événement est déclenché sur tous les éléments ancêtres, à partir de la cible et vers le haut.
  4. L'action par défaut est exécutée (si il n'a pas été annulé dans l'un des gestionnaires)

Ici, l'action par défaut est essentiellement une activité de navigateur utilisateur qui attend lorsqu'il est produit un événement, à savoir le caractère apparition dans la zone de texte lorsque la touche a été enfoncée.

Est-ce que n'importe quel corps maintenant comment attacher le rappel qui sera appelé après l'action par défaut est effectuée? Donc, je voudrais attraper un événement lorsque le personnage est apparu dans textarea. Onchange n'est pas une solution car il est déclenché lorsque le focus est perdu. onkeyup n'est pas la solution aussi

Des idées? [UPD] J'essaye d'attraper un changement de valeur de textarea juste après que le changement soit arrivé. C'est pour copier la valeur de textarea à un div. Ainsi, lorsque j'utilise un événement onkeydown, le contenu div est mis à jour avec un délai d'une pression sur une touche. Je veux avoir juste après la touche.

+0

Qu'est-ce que vous essayez de faire Si vous fournissez plus d'informations sur le problème que vous essayez de résoudre, nous pourrions être ab.? le pour te donner une bonne réponse. Il n'y a aucune raison directe pour laquelle un gestionnaire d'événement onchange ne fonctionnerait pas et soit spécifique, il y a probablement une solution de contournement que vous pouvez essayer. –

+0

J'ai ajouté un cas d'utilisation – glaz666

Répondre

2

Vous avez besoin onkeyup/onkeypress combinaison:

<script type="text/javascript"> 
$(document).ready(function(){ 
    // single button (abcd) 
    $("#source").keyup(function() { 
     $("#target").html($(this).val()); 
    }); 
    // pressed button (aaaaaaaa) 
    $("#source").keypress(function() { 
     $("#target").html($(this).val()); 
    }); 
}); 
</script> 
<textarea id="source"></textarea> 
<div id="target"></div> 

Cet exemple utilise jQuery

+0

super, ça marche! assez gênant, mais fonctionne. – glaz666

2

C'est un hack, mais il devrait fonctionner si vous ajoutez la ligne suivante à votre gestionnaire d'événements réguliers:

setTimeout(functionToExecuteAfterDefaultAction, 0); 

Sergii avait la bonne idée: keypress/keyup fait feu après la modification de la valeur de textarea.Voici un exemple jQuery moins:

<form> 
<textarea></textarea> 
<textarea></textarea> 
</form> 
<script> 
var elements = document.forms[0].elements; 
elements[0].onkeypress = elements[0].onkeyup = function() { 
    elements[1].value = elements[0].value; 
}; 
</script> 

Je sais qu'il y avait quelques problèmes avec cette approche quand je mis en place un textarea de plus en plus, mais je ne me souviens pas mal ce qui se passait exactement :(

+0

oui, c'est un hack et je crois qu'il pourrait produire un comportement inattendu et imprévisible quand il y aura beaucoup de telles fonctions de timeout. – glaz666

+0

EXACTEMENT! J'implémente TOUS les textarea en pleine croissance !! :)) – glaz666

Questions connexes