de la fenêtre.onbeforeunload ne fonctionne pas
J'ai un formulaire dont les champs d'entrée sont enregistrées onChange. Dans firefox (5) cela fonctionne même lorsque la fenêtre est fermée, mais pour Chrome et IE, il ne l'est pas et j'ai besoin d'être sûr que je suis l'enregistrement de ces données, même si elles essaient de fermer la fenêtre après avoir tapé dans un domaine, mais un événement onBlur n'a pas eu lieu (c'est à dire qu'ils ont tapé quelque chose dans une zone de texte, mais je n'ai pas à onglets hors de lui).
J'ai lu la suite de SORTE que les articles sur l'utilisation de la fenêtre.onbeforeunload:
l'article 1
article 2
si j'utilise le suivant:
window.onbeforeunload = function() {
return "onbeforeunload";
}
puis-je obtenir un popup avec "onbeforeunload" dans.
mais si j'essaie:
window.onbeforeunload = function() {
alert("onbeforeunload");
}
puis rien ne se passe dans n'importe quel navigateur, même firefox.
ce que je veux réaliser est:
window.onbeforeunload = function() {
saveFormData();
}
Je serais reconnaissant si quelqu'un pouvait indiquer où je peut mal se passer.
Merci beaucoup
- La première façon que vous avez mentionné est celui de droite.
- Oui onbeforeunload fonctionne sous IE et Firefox mais pas sur Chrome
Vous devez vous connecter pour publier un commentaire.
Vous avez à
return
de laonbeforeunload
:Mise à JOUR
que par les commentaires, alerte ne semble pas fonctionner sur des versions plus récentes plus, autre chose va 🙂
DE MDN
Il est aussi suggéré d'utiliser ce par le biais de la
addEventListener
interface:La mise à jour du code devrait ressembler à ceci:
Il semble y avoir beaucoup de désinformation sur la façon d'utiliser cet événement va autour (même dans upvoted des réponses sur cette page).
La
onbeforeunload
cas de l'API est fournie par le navigateur pour un but précis: La seule chosevous pouvez fairequi en vaut la peine dans cette méthode est de retourner une chaîne dont le navigateur demandera ensuite à l'utilisateur d'indiquer que des mesures doivent être prises avant de quitter la page. Vous NE peut pas les empêcher de quitter une page (imaginez ce qu'est un cauchemar ce serait pour l'utilisateur final).Parce que les navigateurs utilisent une confirmer invite à montrer à l'utilisateur la chaîne que vous avez retourné à partir de votre écouteur d'événement, vous ne pouvez pas faire autre chose dans la méthode (comme effectuer une requête ajax).
Dans une application que j'ai écrit, je tiens à inviter l'utilisateur à leur faire savoir qu'ils ont enregistré vos modifications avant de quitter la page. Le navigateur vous invite avec le message et, après ça, c'est hors de mes mains, l'utilisateur peut choisir de rester ou de partir, mais vous n'avez plus le contrôle de l'application à ce point.
Un exemple de la façon dont je l'utilise (pseudo-code):
Si (et seulement si) l'application a des modifications non enregistrées, puis le navigateur demande à l'utilisateur d'ignorer mon message (et quitter la page de toute façon) ou de ne pas quitter la page. Si ils choisissent de quitter la page de toute façon, trop mauvais, il n'y a rien que vous pouvez faire (ni ne doit être en mesure de le faire) à ce sujet.
vous juste ne peux pas faire des alert() dans onbeforeunload, tout le reste fonctionne
De la pop un message lorsque l'utilisateur quitte la page pour confirmer départ, vous venez de le faire:
Pour appeler une fonction:
La raison pour laquelle rien ne se produit lorsque vous utilisez la "alert ()" est probablement expliqué par MDN: "La spécification HTML indique que les appels à la fenêtre.alert(), la fenêtre.confirm(), et de la fenêtre.prompt() méthodes peuvent être ignorés lors de cet événement."
Mais il y a aussi une autre raison pourquoi vous ne pourriez pas voir l'avertissement, qu'il appelle alert() ou non, a également expliqué sur le même site:
"... les navigateurs ne peuvent pas afficher les invites créé en beforeunload gestionnaires d'événements, à moins que la page a été interagi avec"
C'est ce que je vois avec les dernières versions de Chrome et FireFox. J'ai ouvert ma page qui a beforeunload gestionnaire mis en place avec ce code:
Si je ne clique pas sur ma page, en d'autres termes, "de ne pas interagir" avec elle, et cliquez sur le gros bouton, la fenêtre se ferme sans avertissement.
Mais si je clique sur la page avant d'essayer de fermer la fenêtre ou l'onglet, je reçois le message d'avertissement, et peut annuler la fermeture de la fenêtre.
De sorte que ces navigateurs sont "smart" (et conviviale) si vous ne l'avez pas fait quelque chose avec la page, il ne peut pas avoir de l'entrée utilisateur de la nécessité de l'épargne, de sorte qu'ils vont fermer la fenêtre sans aucun avertissement.
Considérer que sans cette fonctionnalité n'importe quel site pourrait égoïstement vous demander: "voulez-vous vraiment quitter notre site?", lorsque vous avez déjà clairement indiqué votre intention de quitter leur site.
VOIR:
https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
Oui, ce que tout le monde dit ci-dessus.
Pour votre situation immédiate, au lieu de onChange, vous pouvez utiliser onInput, nouvelles en html5. L'événement d'entrée est le même, mais il va en tirer à chaque frappe de touche, indépendamment de la mise au point. Fonctionne également sur les sélectionne et tout le reste comme onChange.