Question

Je

<span class="cssButton"><a href="javascript:void(0);" class="buttonBlue" onclick="swfu.startUpload();"> <img src="http://uber-upload.com/img/icons/up_16.png" alt=""/> Uber-Upload! </a></span>

Et je veux faire en sorte que si vous appuyez sur ce bouton, il définit également une variable qui fait en sorte que si vous essayez de quitter la page, il affiche un de ces « Etes-vous sûr de vouloir quitter cette page » pour empêcher les gens avertit de quitter par mégarde alors qu'il ya un téléchargement en cours.

Ne vous inquiétez pas MHS la variable après la fin du téléchargement, je vais ajouter que, j'ai juste besoin l'un de vous codeurs intelligents pour me faire un cadre.

Merci!

Était-ce utile?

La solution

Ajoutez cette déclaration à la page:

var upcount = 0;

Changer votre onclick à:

onclick="++upcount; swfu.startUpload();"

Si le swfu vous donne une sorte d'événement quand il a fait le téléchargement, mettez ce sur:

--upcount;

Et ajoutez ce gestionnaire:

window.onbeforeunload = function() {
    if (upcount > 0) {
        return "The upload is still in progress, leaving the page will cancel it.";
    }
}

Si les navigateurs respectent le onbeforeunload, ça va fonctionner. Et la plupart d'entre eux, la plupart du temps. Là où ils ne le font pas, eh bien, vous avez essayé. Notez qu'en utilisant un compteur, vous permettant de multiples téléchargements.

Vous pourriez envisager attachEvent (IE) ou addEventListener (standard) (ou une bibliothèque comme Prototype ou jQuery qui égalise les différences pour vous) pour fixer vos événements plutôt que d'utiliser les attributs. Utilisation des attributs (aka handlers DOM0) est assez ancienne et un peu limite (un seul gestionnaire par événement par élément). Mais cela ne fonctionne toujours.

Autres conseils

function warnUser()
{
   if(dataIsDirty)
   {
      return "You have made changes. They will be lost if you continue.";
   }
   else
   {
      // Reset the flag to its default value.
      dataIsDirty = false;
   }
}

function isDirty()
{
   dataIsDirty = true;
}

function isClean()
{
    dataIsDirty = false;
}

Ensuite, vous l'utilisez comme sur l'événement onbeforeunload.

window.onbeforeunload = warnUser;
dataIsDirty = false; //Or true, depending on if you want it to show up even if they dont' make changes)

Ensuite, pour l'utiliser, il suffit d'utiliser la fonction « isClean » pour tout ce que vous ne voulez pas déclencher (Save, par exemple), ou vous pouvez attacher « IsDirty » à tout événement que vous voulez déclencher avant de partir (par exemple, l'édition d'un champ de formulaire).

En se fondant sur onbeforeunload est peu précis au mieux. Parce que les spammeurs ont abusé du comportement de la même manière que vous proposez la possibilité pour les gens à faire ce qui a été essentiellement supprimée.

Vous pouvez maintenant répondre uniquement à OnBeforeUnload si l'événement a été tiré à proximité de l'activation d'un bouton ou tel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top