voilà maintenant plus de 5 jours que je me casse la tête avec le problème suivant:
j'ai le choix de plusieurs personnes (select).
ce choix affecte une couleur à la personne choisie, suite à cela je clique différents quart-d'heures affectés à la personne. si un quart-d'heure cliqué (ce qui transforme la couleur initiale (grise)) est de trop, il suffit de RE-cliquer dessus, ce qui remet la couleur à neutre (grise), un flip-flop en quelque sorte. cela fonctionne sans problème.
les choix sont saisis dans un cookie (array) afin de savoir au "submit" qui a été selectionné et quand. jusque là aucun problème.
le problème est qu'il me faut impérativement un cookie vierge au démarrage de la page, quel qu'il soit, soit par refresh ou par submit etc; et quoi que je fasse, je n'arrive pas à réinitialser ce pu... de cookie. sous php effectivement, je ne le vois plus, cependant javascript s'obstine à le garder tel qu'il est.
pour plus de compréhension je vous met le code source (très simplifié) ci-bas:
Code : Tout sélectionner
<html>
<head>
<script language="javascript" type='text/javascript'>
//jt: couleur de la personne selectionnée
//last_attributed: dernière couleur attribuée (attention une couleur est un entier)
//color: tableau faisant le lien entre id d'une personne et sa couleur (en static sinon stocké dans le cookie colors)
//person: id de la personne selectionne (paramètre value de l'option selectionnée dans le select)
//ptitle: élément à mettre dans title et alt
var jt=-1;
var last_attributed=-1;
var color=new Array();
var person="";
var ptitle='';
var tp_last = getCookie("colors[last]");
var temp=0;
//tp_last: contenu du cookie colors[last] soit la dernière couleur attribuée
//tp_last est vide, si le cookie a été libéré ou n'est pas encore créé dans
// cas dernière couleur attribuée est -1 (par défaut), sinon elle vaut tp_last
if (tp_last!='') last_attributed = tp_last;
function getCookie(name) {
//récupére le cookie nommé name
// attention si le cookie est un tableau,
// en php $_COOKIE[nom du cookie] est un array
// en javascript les éléments sont accessibles
// en direct uniquement soit name=nom du cookie[index de l'élément]
// getCookie(nom du cookie) renvoie null si le cookie est un tableau
if (document.cookie.length>0) {
start = document.cookie.indexOf(name+"=");
pos = start+name.length+1;
if (start != 0) {
start=document.cookie.indexOf("; "+name+"=");
pos=start+name.length+3;
}
if (start != -1) {
start = pos;
end = document.cookie.indexOf(";",start);
if (end == -1) end=document.cookie.length;
return unescape(document.cookie.substring(start,end));
}
}
return '';
}
function controle_affect_color(val,name) {
//val: le paramètre value du select (id de la personne)
//name: le nom de la personne selectionne
//attribue une couleur à un élément unique du select
//si val=0, c'est l'élément par défaut ici ---- qui n'a pas besoin de couleur
if (val != 0) {
//si l'élément n'a pas encore de couleur l'index val n'existe pas dans color
if (color[val] == null) {
//si on trouve le cookie colors[nom de la personne] alors une couleur a déjà
//été attribuée avant le rafraichissement de la page et on réattribue la même
var tp = getCookie("colors["+name+"]");
if (tp!='') color[val]=tp;
else {
//sinon on récupère la dernière valeur attribuée last_attributed
//qui est une chaine de caractère si importé depuis le cookie d'où
//parseInt
color[val]=parseInt(last_attributed)+1;
//on génére la couleur attribuée dans le cookie
document.cookie="colors["+name+"]="+color[val]+";";
//on incrémente last_attributed
last_attributed++;
//on génére le cookie colors[last] contenant la dernière couleur attribuée
document.cookie="colors[last]="+last_attributed+";";
}
}
//la valeur à mettre dans title et alt est initialisée au nom de la personne selectionnée
ptitle=name;
return color[val];
}
//on a cliqué sur l'option par défaut du select ici '----' donc alt et title doivent être mis à vide
//et la couleur attribuée est -1
ptitle='';
return -1;
}
function maj_img(id,obj,name,src) {
//id: paramètre id du input
//obj: image (toujours this correspond à l'élément dans lequel le javascript est utilisé
//name: contenu à mettre dans title et alt de l'image
//src: url de l'image
var div=document.getElementById("total");
div.innerHTML="<PRE>HEURES ALLOUEES:\n";
//met les inputs image a jour
if ((name!=obj.alt)&&(person!=0)) {
//si name le nom à mettre dans title et alt est différent de celui déjà présent, on remplace
document.getElementById(id).value=person;
obj.src="img/plan/"+src+".png";
if (obj.alt=='') temp+=25;
obj.alt=name;
obj.title=name;
} else {
//sinon c'est un flip flop, donc image par défaut, title et alt vide, et valeur par défaut dans l'input ou
//on a selectionne l'option par défaut du select (value=0)
document.getElementById(id).value=-1;
obj.src="img/plan/-1.png";
obj.alt='';
obj.title='';
if (temp>0) temp-=25;
}
if (temp/100>0) div.innerHTML+=Math.floor(temp/100)+"h"+temp%100+"min</PRE>";
else div.innerHTML+=temp+"min</PRE>";
}
</script>
<style type="text/css">
.day {
text-align: center;
vertical-align: top;
font-size: 60%;
font-weight: bold;
}
.spc {
font-size: 50%;
}
img {
border: 0;
vertical-align: middle;
}
form {
margin: 0px;
padding: 0px;
}
</style>
</head>
<body><center>
<form method="post">
<select name="pers" onChange="person=this.options[this.selectedIndex].value;jt=controle_affect_color(this.value,this.options[this.selectedIndex].text);">
<option value="0" selected>----</option>
<option value="10">Rémi</option>
<option value="20">Marcel</option>
<option value="30">Michel</option>
<option value="40">Christiane</option>
<option value="50">Julien</option>
<option value="60">Matthieu</option>
<option value="70">Vincent</option>
<option value="80">Stéphane</option>
<option value="90">Marc</option>
</select>
<br /><br /><br />
<table summary="" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="day" style="height:15px;">Hrs-></td>
<?php
if (isset($_POST['tab'])) {
$l=$_POST['tab'];
print_r($_POST);
echo "<br>";
print_r($_COOKIE['colors']);
} else {
for($j=0;$j<1;$j++)
for($i=0;$i<96;$i++)
$l[$j][$i]=-1;
}
$jrs=array("Lun","Mar","Mer","Jeu","Ven","Sam","Dim");
for($k=0;$k<24;$k++) echo '<td class="day" colspan="5">'.$k.'</td>';
echo "\r</tr>";
for($j=0;$j<1;$j++) {
echo '<tr>
<td valign="middle">'.$jrs[$j].' </td>';
for($i=0;$i<96;$i++) {
if ($i%4==0) echo '<td class="spc"> </td>';
$color=-1;
if (isset($_COOKIE['colors'])) {
$l[$j][$i] = trim($l[$j][$i]);
if (array_key_exists($l[$j][$i], $_COOKIE['colors']) !== false) $color = $_COOKIE['colors'][$l[$j][$i]];
}
echo '<td valign="middle">
<input id="'.$j.$i.'" type="hidden" name="tab['.$j.']['.$i.']" value="'.$l[$j][$i].'" />
<img src="img/plan/'.$color.'.png" onClick="maj_img(\''.$j.$i.'\',this,ptitle,jt);" alt="" title="" />
</td>';
}
echo "\r</tr>\n\t";
}
?>
</table>
<br />
<input type="submit" value="enregistrer" />
</form>
<div id='total' style="float:center; position:relative; center:75px;"></div>
</center></body>
</html>pout toute aide, par avance merci