Salut à tous,
Je m'arrache les cheveux sur une function JS que j'essaye de faire. Je voudrais dans un formulaire, a chaque fois qu'on a un changement sur un select, afficher une infobulle (dans une div ou autre) pendant 1 ou 2 secondes (puis elle disparaîtrait). Le problème c'est que si je descend le <select> au clavier... Ca fait juste tout buggué. J'utilise ca aussi sur des <input /> et quand je tab assez vite. La fonction fait un peu n'importe quoi (enfin elle fait ce que je lui dit de faire).
Voici ma fonction a l'heure actuelle. C'est pas très propre car je fais des essais.
Ma function d'origine (qui marche pas plus. Voir même moins bien. Disons que c'est mon premier essai.
Si quelqu'un à une idée (ou un script déjà fait. J'ai cherché mais je vois pas comment ca peux s'appeller).
EDIT : Le soucis c'est surtout que j'aimerai que le timer qui "efface" la <div> se remette à zéro a chaque fois qu'on la réaffiche (parce que si on va vite, des fois au lieu de rester 1seconde afficher elle reste un centieme de seconde)
Modifié par ffwrude (28 Aug 2012 - 15:27)
Je m'arrache les cheveux sur une function JS que j'essaye de faire. Je voudrais dans un formulaire, a chaque fois qu'on a un changement sur un select, afficher une infobulle (dans une div ou autre) pendant 1 ou 2 secondes (puis elle disparaîtrait). Le problème c'est que si je descend le <select> au clavier... Ca fait juste tout buggué. J'utilise ca aussi sur des <input /> et quand je tab assez vite. La fonction fait un peu n'importe quoi (enfin elle fait ce que je lui dit de faire).
Voici ma fonction a l'heure actuelle. C'est pas très propre car je fais des essais.
var x=0;
var myVar;
var myVar2;
var myVar3;
var in_function = 0;
function div_ephemere_appear(){
in_function = 1;
clearTimeout(myVar2);
if(x == 100){
in_function = 0;
setTimeout(function(){if(in_function==0)div_ephemere_disappear()},1000);
return false;
}
in_function = 1;
var div_ephemere = document.getElementById("div_ephemere");
if(navigator.userAgent.indexOf("MSIE") != -1){
div_ephemere.style.filter = "alpha(opacity="+x+")";
}else{
div_ephemere.style.opacity = "0."+x+"";
}
myVar=setTimeout(function(){div_ephemere_appear()},1);
x=x+5;
document.title = x;
}
function div_ephemere_disappear(){
if(in_function == 1){
clearTimeout(myVar2);return false;
}
var div_ephemere = document.getElementById("div_ephemere");
if(navigator.userAgent.indexOf("MSIE") != -1){
div_ephemere.style.filter = "alpha(opacity="+x+")";
}else{
div_ephemere.style.opacity = "0."+x+"";
}
myVar2=setTimeout(function(){div_ephemere_disappear()},1);
x=x-5;
if(x == 0){
clearTimeout(myVar2);
}
}
Ma function d'origine (qui marche pas plus. Voir même moins bien. Disons que c'est mon premier essai.
var i = 0; var mode = "+"; var action2 = ""; var action = "";
function div_ephemere_action(action){
if(action != "")action2=action;
if(action == "off" && mode == "+"){
alert("");return false;
}
if(i == 0 && mode == "-"){
return false;
}
if(mode == "+"){
i = i+5;
}else if(mode == "-"){
i = i-5;
}
if(i == 100){
mode = "-";
action = "on";
setTimeout('div_ephemere_action(\"off\")','5000');
return false;
}
var div_ephemere = document.getElementById("div_ephemere");
if(navigator.userAgent.indexOf("MSIE") != -1){
div_ephemere.style.filter = "alpha(opacity="+i+")";
}else{
div_ephemere.style.opacity = "0."+i+"";
}
div_ephemere.innerHTML = action2;
setTimeout('div_ephemere_action(action)','1');
}
Si quelqu'un à une idée (ou un script déjà fait. J'ai cherché mais je vois pas comment ca peux s'appeller).
EDIT : Le soucis c'est surtout que j'aimerai que le timer qui "efface" la <div> se remette à zéro a chaque fois qu'on la réaffiche (parce que si on va vite, des fois au lieu de rester 1seconde afficher elle reste un centieme de seconde)
Modifié par ffwrude (28 Aug 2012 - 15:27)