Pergunta

Eu tenho

<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 eu quero fazê-lo de modo que se você pressionar esse botão, ele também define uma variável que faz com que se você tentar deixar a página, ele irá aparecer um daqueles "Tem certeza de que deseja sair esta página" alertas para evitar que pessoas acidentalmente deixando enquanto houver um upload acontecendo.

Não se preocupe com desarmar a variável após o carregamento termina, eu vou acrescentar que, eu só preciso de um de vocês codificadores inteligentes para me fazer um quadro.

Obrigado!

Foi útil?

Solução

Adicione esta declaração à página:

var upcount = 0;

Mude o seu onclick para:

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

Se o swfu dá-lhe algum tipo de evento quando é feito o upload, colocar isso nele:

--upcount;

E adicionar esse manipulador:

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

Onde navegadores respeitar a onbeforeunload, que vai trabalhar. E a maioria deles fazer, na maioria das vezes. Onde eles não, bem, você tentou. Note-se que, utilizando um contador, você está permitindo múltiplas uploads.

Você pode considerar attachEvent (IE) ou addEventListener (standard) (ou uma biblioteca como protótipo ou jQuery que equilibra as diferenças para você) para a fixação de seus eventos ao invés de usar atributos. Usando atributos (aka manipuladores Dom0) é bastante antiquado e limitação pouco (apenas um manipulador por evento por elemento). Mas ele ainda não funciona.

Outras dicas

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

Em seguida, você usá-lo apenas como sobre o evento onbeforeunload.

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

Depois de usá-lo, basta usar a função 'isClean' para qualquer coisa que você não quer provocá-lo (Save, por exemplo), ou você pode anexar 'IsDirty' para qualquer evento que pretende acioná-lo antes de sair (por exemplo, a edição de um campo de formulário).

Baseando-se em onbeforeunload é impreciso. Porque os spammers têm abusado o comportamento da mesma maneira que você está sugerindo a capacidade das pessoas de fazer isso tem sido basicamente removido.

Você agora só pode responder a onbeforeunload se o evento perto foi demitido de activação de um botão ou algo semelhante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top