2010-01-20 3 views
14

Y at-il un moyen de déterminer si l'utilisateur a cliqué sur OK ou sur CANCEL?Capturez la réponse de l'utilisateur lors de l'utilisation de window.onbeforeunload

que je dois faire quelque chose seulement si l'utilisateur quitte la page ....

+0

Pour autant que je sache, vous (encore, en 2014) doivent supposer que si le window.onunload est tiré, ils ont répondu à la question sur OK onbeforeunload. J'espérais quelque chose de beaucoup plus propre, mais je ne l'ai pas encore trouvé. – Patrick

Répondre

4

Non, les navigateurs vous permettent de spécifier que le texte dans la zone d'alerte, mais aucun moyen pour attraper le résultat.

+1

oh super, cette fonction est très utile alors (sarcasme). passer à onunload – sarsnake

+0

Soit c'est complètement faux ou je deviens fou. Je sais qu'il est possible de montrer une boîte de dialogue de confirmation lors du déchargement; ce même site le fait si vous cliquez sur Précédent lors de la modification d'un post. – iandisme

+0

@gnomixa vous plaisantez? Je suis * heureux * les navigateurs ne donnent pas ce pouvoir aux scripts. –

8

Voici la solution que j'utilise dans une situation où je dois faire quelque chose (comme effacer la session) SEULEMENT lorsque l'utilisateur navigue depuis la page.

J'ai 2 vars mondial

var clearSession = true; 
var confirmExit = true; 


    window.onbeforeunload = function() { return confirmExit(); } 
    window.onunload = function() { return clearSession(); } 

function confirmExit() { 
    if (needToConfirm == true) {  

     return "exit page?"; 
    } 
} 


function clearSession() { 

    if (clearSession == true) { 
     alert("Killing the session on the server!!!"); 
     PageMethods.ClearSession(); 
    } 
} 

Alors bien sûr, sur chaque page soumettre/bouton/liste déroulante etc ... vous devez vous assurer que les variables globales ci-dessus sont définies sur false.

Espérons que cela aide quelqu'un.

1

Vous pouvez utiliser un setTimeout pour vérifier.

window.onbeforeunload = function() { 
    if (needToConfirm) { 
     setTimeout(function() { 
      alert('User still is on the page'); 
     }, 0); 
     return 'Are you sure you want to leave?'; 
    } 
}; 

Fondamentalement, les blocs fonctionnels OnBeforeUnload l'exécution et le délai d'attente ne seront exécutées que si l'utilisateur reste sur la page. Le 0 millisecondes est seulement pour le mettre au bas de la file d'attente d'exécution.

+0

Cela fait le contraire de ce qui a été demandé dans la question. La question était (paraphrasée) "Comment puis-je faire agir mon code lorsque l'utilisateur décide de * quitter * la page?" Le code de votre réponse agit (déclenche une alerte) lorsque l'utilisateur * reste * sur la page. Je suis sûr que vous pourriez corriger le code pour faire ce que la question demande réellement, mais alors qu'est-ce que cette méthode fournirait est mieux que la méthode proposée par [sarsnake] (http://stackoverflow.com/a/ 2103974/1906307)? – Louis

0

Ceci est une astuce de programmation ou plutôt une solution de contournement que vous pouvez essayer. Je n'ai trouvé aucun "javascript fourni" façons de le faire par défaut

J'ai une page Web (il a une forme en elle) assis sur un système local qui doit être protégé contre les utilisateurs non autorisés d'entrer des entrées à elle .

J'ai créé une fonction JavaScript qui se charge avec le chargement de la page principale.

comme ci-dessous

<script src="./resources/brazil-uam-all-javascript.js"></script> 
    </head> 
<body id="uam_gui" onload="authenticate2();"> 
<div id="UAM_tool"> 

MAINTENANT LA FONCTION JAVASCRIPT

L'utilisateur est censé entrer une valeur lorsque vous êtes invité avec une boîte de dialogue. Si l'utilisateur n'entre aucune valeur et essaie simplement de le contourner en cliquant sur OK ou CANCEL ou utilise la touche ESC ou le bouton "Fermer" pour éviter l'authentification, la page rebondira avec la même invite. Ici, je capture indirectement la réponse de l'utilisateur. J'espère que cela répond à vos besoins.

function authenticate2() { 
var prompt_for_the_magic_number = prompt("Enter Your       M A G I C N U M B E R  ::: ", ""); 
    if (prompt_for_the_magic_number === true) 
    { 
     if (prompt_for_the_magic_number.length === 0) 
     { 
      alert("You are supposed to ENTER A VALUE"); 
      location.reload(); 
     } 
     else 
     { 
      if (prompt_for_the_magic_number.length > 4) 
      { 
       alert("You are supposed to ENTER ONLY 4 DIGITS"); 
       location.reload(); 
      } 
      esle 
      { 
       //some code to allow access based on a logic 
      } 
     } 
    } 
    else 
    { 
     alert("You are supposed to ENTER 4 DIGITS"); 
     location.reload(); 
    } 
} 
Questions connexes