Je dois passer à coté de quelque chose [AJAX]
Bonjour à tous!
Je demande très rarement de l'aide j'aime mieux la googler, mais je dois avouer que cette fois j'ai besoin d'un coup de pouce. L'erreur doit être bête puisque le code est très simple.
Ce que j'essaie de faire
J'ai quatre conteneurs (Div). Lorsqu'un utilisateur clique sur l'un d'entre eux, j'ai une petite animation jQuery (accordéon) pour ouvrir mon div. J'enlève mon événement sur le Div sélectionner et le rajoute si l'utilisateur clique sur un autre.
Mon problème
Mon événement s'enlève seulement au deuxième clique, pas au premier. Pourtant c'est la même fonction qui s’exécute !
Mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
var constants = {
'CONTENEUR2': '#397770',
'CONTENEUR3': '#d8ad66',
'CONTENEUR4': '#8fa751'
};
var id = "";
var initcolor = "";
$(function(){
// Initialise les évènements sur tous les conteneurs
addAccordeonListener("#conteneur_2, #conteneur_3, #conteneur_4");
var current = null;
$(".conteneur").live("click",function(){
$("#"+($(this).attr("id"))).die();
if(current!=null){
$(current).animate({width: "25%"}, {duration:300, queue:false});
addAccordeonListener(current);
}
if(id!="conteneur_1"){
$("#conteneur_1").animate({width: "10%"}, {duration:300, queue:false});
$(this).animate({width: "40%"}, {duration:300, queue:false});
}
current = $(this);
})
function addAccordeonListener(selector){
// Effet mouser over des blocs de contenus
$(selector).live("mouseover", function(){
id = $(this).attr("id");
var bgcolor = "";
initcolor = $(this).css("background-color")
switch(id){
case('conteneur_2'):
bgcolor = constants.CONTENEUR2;
break;
case('conteneur_3'):
bgcolor = constants.CONTENEUR3;
break;
case('conteneur_4'):
bgcolor = constants.CONTENEUR4;
break;
}
$('#'+id).css("backgroundColor", bgcolor);
})
// Effet mouser out
$(selector).live("mouseout", function(){
$('#'+id).css("backgroundColor", initcolor);
})
}
function removeAccordeonListener(selector){
// Enlève l'effet mouser over des blocs de contenus
$(selector).die();
}
}); |
Note spéciale
J'ai dupliqué mon mon événement "click" deux fois ainsi que la méthode qui s'en suit et le code marchait du premier coup!
À spécifié que le code n'est pas final. Il intégrera un peu de Ajax donc il n'est pas fignolé!