Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, quero saber se é possível usar setTimeout, definindo o tempo apartir de uma variável ou função!?!?
Eu tentei o seguinte, e coloquei na **<body>** um **onload="alerta('teste', 5000);"**:
function alerta(text, time) {
setTimeout(alert(text), time);
}
Mas nesse caso ae, o alerta é exibido imediatamente, não espera os 5 segundos definidos pela variável...
Esse caso ae foi meio que por curiosidade, já que meu problema está no seguinte. Fiz um algoritmo de erros pro site que estou fazendo com PHP e JS, a parte javascript é da seguinte:
errorbox = document.getElementById("errorbox");
function hidebox(redirect) {
errorbox.innerHTML = "";
errorbox.setAttribute("style", "display: none;");
if(redirect != "none") {
window.location = redirect;
}
}
function redirtime(check) {
if(check == "none") {
return 10000;
}
else {
return 5000;
}
}
function showerror(message, address) {
errorbox.setAttribute("style", "display: block;");
errorbox.innerHTML = message;
setTimeout(hidebox(address), redirtime(address));
}
A chamada da função no html é da seguinte forma:
<body<?php if(isset($error["msg"])){ echo " onload='showerror(".$error["msg"].", ".$error["url"].");'"; unset($error); } ?>>
Lá no PHP uso da seguinte forma: quando preciso mostrar uma mensagem de erro ou falha para o usuário, crio um array na variável $error da seguinte forma:
$error = array("msg" => "Mensagem a exibir para o usuário", "url" => "none");
A chave "url" é "none" ou o endereço para o qual quero redirecionar o usuário.
Vou explicar +/- o que pretendo com esse sistema: caso eu defina uma mensagem de erro lá no php, o onload é inserido na body chamando a função showerror() com a mensagem de erro e o endereço para redirecionamento, ou "none". A div "errorbox" que inicialmente fica oculta é exibida com a mensagem de erro. Caso tenha sido definida uma url para redirecionar o usuário, em 5 segundos a div é oculta e o mesmo é redirecionado, caso não ("none"), a div é oculta após 10 segundos.
Então, ainda não testei totalmente esse script, mas um dos problemas que já percebi por meio de testes com funções semelhantes é que o setTimeout ignora o tempo, executa a função imediatamente.
Alguém saberia o que causa isso, o que estou fazendo de errado?
Caso alguém tenha alguma sugestão de otimização desse algoritmo todo ae, aceito também :D
Carregando comentários...