Domanda

ho

<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>

e voglio fare in modo che se si preme il pulsante, imposta anche una variabile che fa in modo che se si tenta di lasciare la pagina, si aprirà una di quelle "Sei sicuro di volere lasciare questa pagina" avvisi per impedire alle persone di accidentalmente lasciando mentre v'è un caricamento in corso.

Non preoccuparti disinserimento la variabile dopo la fine di upload, aggiungerò che, ho solo bisogno di uno di voi programmatori intelligenti per farmi un quadro.

Grazie!

È stato utile?

Soluzione

Aggiungi questa dichiarazione alla pagina:

var upcount = 0;

Cambia l'onclick a:

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

Se il swfu ti dà qualche tipo di evento quando è fatto l'upload, mettere questo su di esso:

--upcount;

E aggiungere questo gestore:

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

Dove browser rispettano l'onbeforeunload, che sarà il lavoro. E la maggior parte di loro lo fanno, la maggior parte del tempo. Quando non lo fanno, bene, si è tentato. Si noti che, utilizzando un contatore, si sta permettendo l'upload multiplo.

Si potrebbe considerare attachEvent (IE) o addEventListener (standard) (o di una libreria come prototipo o jQuery che uniforma le differenze per voi) per fissare i vostri eventi piuttosto che utilizzare gli attributi. Utilizzando gli attributi (aka handler dom0) è abbastanza vecchio stile e un po 'limitante (un solo gestore per evento per elemento). Ma non ancora lavoro.

Altri suggerimenti

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;
}

Poi lo si utilizza, proprio come l'evento onbeforeunload.

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

Poi per utilizzarlo, basta usare la funzione 'isClean' per tutto quello che non si vuole innescare (Save, per esempio), oppure si può collegare 'IsDirty' a qualsiasi evento che si desidera innescare prima di lasciare (ad esempio, la modifica di un campo di modulo).

Basandosi su onbeforeunload è impreciso al meglio. Poiché gli spammer hanno abusato il comportamento nello stesso modo che stai suggerendo la possibilità per le persone a fare questo è stato sostanzialmente rimosso.

È ora possibile rispondere solo onbeforeunload se l'evento close è stato licenziato dalla attivazione di un pulsante o ad esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top