J'utilise window.onbeforeunload
pour ouvrir une boîte de dialogue de confirmation lorsqu'un événement de fermeture se produit, mais la boîte de dialogue de confirmation apparaît lors de l'actualisation de la page et ne s'exécute pas à la fermeture de la page.
Voici le code JavaScript:
<script language="JavaScript">
window.onbeforeunload = confirmWinClose();
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
</script>
Je l'ai essayé sur Chrome, Firefox et Internet Explorer.
PROBLÈME AVEC VOTRE CODE:
la fonction sera appelée lorsque vous refresh
, car on refresh the page is unloaded and then reloaded
.
dans votre solution, vous devez également noter que vous n'affectez pas une function
à window.onbeforeunload
mais que vous affectez le return value of the function
lorsque vous écrivez
window.onbeforeunload = confirmWinClose();
qui peut également exécuter la fonction (en fonction de l'endroit où vous la placez dans le javascript) chaque fois que l'assignation est effectuée. Par exemple
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
window.onbeforeunload = confirmWinClose();
le code ci-dessus exécutera la fonction confirmWinClose
chaque fois que ce js est chargé.
(pas votre cas car vous avez défini la fonction après l'appel, donc ne sera pas exécuté au chargement, mais vous devriez vous en souvenir)
SOLUTION:
la solution ci-dessous fonctionne pour close
également
au lieu de votre solution, j'ai essayé ceci
JS:
window.onbeforeunload = function() {
var confirmClose = confirm('Close?');
return confirmClose;
}
ou
window.onbeforeunload = confirmWinClose; //note the absence of calling parantheses
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
cela fonctionne comme prévu.
notez également que vous devriez explicitement ajouter return
à partir de onbeforeunload
.
même si vous devez appeler une fonction, vous devriez faire
<script>
window.onbeforeunload = function(e) {
callSomeFunction();
return null;
};
</script>
Pas de solution complète, mais vous pouvez intercepter la touche F5 (pas intercepté si l'utilisateur clique sur le bouton d'actualisation du navigateur ...)
var isRefresh = false;
// with jquery
$(function() {
$(document).on("keydown", function(e) {
if (e.which === 116)
{
isRefresh = true;
}
});
});
window.onbeforeunload = function() {
if (! isRefresh)
{
return confirm ('Close ?');
}
return false;
};
Essayez ceci cela fonctionnera. Vous affectiez la méthode à onload qui doit être exécutée lorsqu’il se produit, elle doit donc ressembler à objet. référencez le lien pour une meilleure explication - var functionName = function () {} vs function functionName () {}
window.onbeforeunload = confirmWinClose;
function confirmWinClose () {
var confirmClose = confirm('Close?');
return confirmClose;
};
Puisque de toute façon vous ne voulez afficher que votre texte, qu’est-ce que l’utilisation de onbeforeunload comme il est attendu revient à renvoyer la chaîne?
<script language="JavaScript">
window.onbeforeunload = confirmWinClose;
function confirmWinClose() {return "close?";}
</script>