Pregunta

Tengo

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

Y quiero hacerlo de modo que si se pulsa el botón, sino que también establece una variable que lo hace de manera que si se intenta salir de la página, aparecerá uno de los "¿Estás seguro de querer dejar esta página" alerta de evitar que la gente accidentalmente dejando mientras que hay una carga pasando.

No se preocupe acerca de desarmar la variable después de terminar la carga, voy a añadir que, sólo necesito uno de ustedes codificadores inteligentes para mí hacer un marco.

Gracias!

¿Fue útil?

Solución

Añadir esta declaración a la página:

var upcount = 0;

Cambiar su onclick a:

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

Si el swfu le da algún tipo de evento cuando se hace subir, poner esto en él:

--upcount;

Y añadir este controlador:

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

Cuando los navegadores respetan la onbeforeunload, que va a trabajar. Y la mayoría de ellos lo hacen, la mayor parte del tiempo. Cuando no lo hacen, además, que ha intentado. Tenga en cuenta que mediante el uso de un contador, que está permitiendo múltiples archivos.

Usted podría considerar attachEvent (IE) o addEventListener (estándar) (o una biblioteca como prototipo o jQuery que nivela las diferencias para usted) para la fijación de sus eventos en lugar de utilizar atributos. El uso de atributos (también conocido como manipuladores Dom0) es bastante anticuada y un poco limitante (sólo un controlador por evento por elemento). Pero aún funciona.

Otros consejos

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

A continuación, lo utiliza igual que en el caso onbeforeunload.

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

Luego de usarlo, sólo tiene que utilizar la función 'isClean' a todo lo que no quiere desencadenar (Guardar, por ejemplo), o se puede adjuntar 'isDirty' a cualquier evento que desea activarlo antes de salir (por ejemplo, la edición de un campo de formulario).

Basándose en onbeforeunload es, en el mejor. Dado que los spammers han abusado de la conducta de la misma manera que está sugiriendo la posibilidad de que las personas que hacen esto se ha eliminado básicamente.

Ahora sólo se puede responder a onbeforeunload si el evento de cierre fue despedido de la activación de un botón o algo así.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top