0
votes

Pourquoi alerte () s'exécute même si Pêturdefault () est appelée avant alerte ()?

Dans le code suivant, pourquoi l'alerte ('alerte sur BTN est déclenchée')})})}) code> incendies, même si event.preventdefault () code> est appelé avant cette ligne Dans le Cliquez sur CODE> Handler du #btn code> El.

Aussi, pourquoi onclick = "alerte () code> ne tire pas sur #btn code> ou sur #wrap code> div mais les incendies de rappel attachés à Cliquez sur CODE> avec AddeventListener CODE> Feux. P>

P>

<div id="wrap" onclick="alerted">
  <button id="btn" onclick="alerted">Click Me</button>
</div>


6 commentaires

L'alerte n'est pas l'action par défaut de l'événement, l'empêchement naturellement de la valeur par défaut n'a aucun effet sur l'alerte . De plus, rien dans le système d'événements DOM ne peut mettre fin à une fonction JavaScript au milieu. Les fonctions JavaScript sont exécutées à l'achèvement.


Sauf un retour @ T.J.Crowder: p


@Jaromandax - retour est une achèvement.


Bon point @ T.J.Crowder - Je n'ai pas lu votre commentaire complètement: p


@ T.J.Crowder "L'alerte n'est pas l'action par défaut de l'événement", quelle est l'action par défaut pour un bouton


@appu - votre bouton a le type défaut , qui est "soumettre" . Un bouton Soumettre qui n'est pas sous un formulaire n'a pas d'action par défaut sur Cliquez sur . Si c'était sous une forme, cela soumettrait le formulaire.


3 Réponses :


6
votes

appeler événement.preventDefault () code> ou event.stoppropagation code> n'arrête pas le rappel actuellement en cours. peu importe em> le contexte d'une fonction, s'il commence à exécuter, le seul moyen de l'empêcher de continuer à continuer d'être explicitement retour code>.

Si vous voulez vous assurer que le Le reste de la fonction s'arrête en cours d'exécution lorsque PRENVENDEFAULT () code> est appelé, passe à: p> xxx pré>

Ce serait probablement une bonne idée de définir événement code> comme argument que le gestionnaire prend plutôt que de s'appuyer sur la fenêtre implicitly global .event code> (qui, bien qu'il fonctionne em> dans certains navigateurs, est Pas une bonne idée d'utiliser ).

p>

<div id="wrap" onclick="alerted">
  <button id="btn" onclick="alerted">Click Me</button>
</div>


2 commentaires

Malheureusement, le premier chrome, et maintenant, je pense que même Firefox, a adopté cela une fois que Microsoft spécifique des déchets de l'événement mondial non standard: P


@Jaromandax - et ils (Mozilla) ont tenu à Soooooo Long. :-) Mais C'est précisé maintenant , comme beaucoup de bits hérités de déchets le Web est bloqué avec la compatibilité. J'aimerais penser que les navigateurs commenceraient à émettre des messages de console de dépréciation lorsqu'il est utilisé, mais ...



-2
votes

Parce que lorsque l'événement tire même si vous arrêtez sa propagation, il ne tirera pas dans d'autres auditeurs d'événements, mais votre fonction continuera à exécuter.


0 commentaires

1
votes

Explanation: L'alerte n'est pas par défaut dans votre événement de clic, appelant événement.preventDefault (); ou ne pas déclenchera l'alerte de toute façon.

PREVENDDEFAULT () dépend de l'événement par défaut. Exemple: Utilisation de PRENVENDEFAULT () ON CLICK Event empêchera de cliquer sur la gâchette ou de l'utilisation de PRENVENDEFAULT () ON EMPLOIDE Empiècer le clavier par défaut.

Tout comme la réponse actuelle, pour empêcher l'alerte, utilisez retour;

Aussi, je viens de remarquer, votre code onclick = "alerted" doit être onclick = "alerte ()"

mise à jour:

Explanation 1: L'alerte ne tire pas dans le BTN car il a été empêché. Vous mettez alerted () sur Onclick et le Cliquez sur Événement a été empêché. En d'autres termes, l'alerte est à l'intérieur de clic, cliquez sur a été empêché de sorte que l'alerte ne tire pas.

Explication 2: Bouton est un objet non un événement, les objets peuvent avoir les mêmes événements. Exemple: Les divs sont conteneurs mais vous pouvez utiliser un événement de clic sur eux.


3 commentaires

onclick = "alerté () corrigé cela. Mais toujours alerte () ne déclenche pas en cliquant sur le bouton ou div. peut-on expliquer, pourquoi?


L'alerte n'est pas par défaut dans votre événement de clic alors quelle est la valeur par défaut pour un bouton


De plus, cela est assez confus, car vous utilisez onclick = "" dans html, même si vous avez déjà utilisé addeventlistener sur javascript.