11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,j'ai une petite question

J'ai 3 listes de choix de photos créées au depart d'un tableau Js lui meme créé en PHP.
Quand l'utilisateur a selectionné ses 3 photos, il doit passer par un apercu qui recharge la meme page.
Je recupere donc les VALUE de mes listes via $_POST ( les value des listes correspondent aux ID des photos dans MySql )

La je veux resélectionner dans mes listes les photos qu'il avait sélectionnées.

Le seul moyen que j'ai trouvé, c'est 3 boucles qui testent toutes les
photos des listes et quand elle trouve la bonne VALUE, elle met SELECTED=true sur le bon item.


for(compteur=0;compteur <= nombrephotos[x];compteur++){
if(document.formulaire.idphoto1.options]compteur[.value=='.$idphoto1.'{
document.formulaire.idphoto1.options]compteur[.value.selected=true;
}
if(document.formulaire.idphoto2.options]compteur[.value=='.$idphoto2.'{
document.formulaire.idphoto2.options]compteur[.value.selected=true;
}
if(document.formulaire.idphoto3.options]compteur[.value=='.$idphoto3.'{
document.formulaire.idphoto3.options]compteur[.value.selected=true;
}
}


Y aurait il une fonction qui permet directement de selectionner l'item dont je connais seulement la value???

Merci
PS : j'ai mis les ][ a l'envers parce que ca ne passe pas dans le textarea
Modifié par gabnico (02 Jun 2005 - 17:46)
Bonjour,

Il te suffit de conserver la structure de chaque liste sous forme de tableau : index=>valeur_de_l'option.

Au rechargement, tu récupère les index des valeurs choisies, fonction de la valeur du $_POST['name'] de référence et tu créé une variable de tableau pour chaque liste par exemple :
$selected[n]="selected=\"selected\""
.

Ensuite tu implémentes à chaque option de tes listes l'item du tableau selected de référence qui vaudras vide ou la chaine selected :

<select>
<option ... $selected[0]>...</option>
<option ... $selected[1]>...</option>
<option ... $selected[2]>...</option>
...
</select>


Comme je crois comprendre qu'au départ tu dispose déjà d'un ou plusieurs tableaux PhP pour construire tes listes de choix (mais que viens faire le js la dedans ???) tu à déjà le mécanisme.

JP
Modifié par jpv (02 Jun 2005 - 04:32)
Bonjour.
Merci pour vos réponses.

@jpv: ce n'est pas exactement ca.
Le visiteur arrive sur la page et la il y a 4 listes de choix, une pour le secteur, et trois pour les photos qui dépendent du secteur. Par défault, j'affiche "selectionner un secteur" dans la liste secteur, et dans les listes de photos, j'ai aussi mis par défaut "selectionner un secteur"
Jusque la, c'est du html.
Lorsque l'utilisateur sélectionne un secteur, les noms des photos disponibles apparaisent dans les listes de photos grace a un tableau javascript qui contient les noms des photos, et ce tableau js est créé en php puisque les données viennent d'une BDD.

quand l'utilisateur a selectionné ses photos, il doit passer par un apercu avant d'encoder definitivement ses choix.

L'apercu recharge la meme page. La liste de photo JS est recréée de la meme facon en php et grace a la valeur du secteur sélectionné récupérée via le POST, je sais réafficher les bonnes listes de photos.

Reste a mettre en selected les choix qu'il avait encodé.
Pour le secteur, pas de pb puisque la value du secteur que j'ai récupérée correspond au nom de l'option du secteur donc je sais faire :


<?php
if ($_POST['apercu']){
    $idsecteur=$_POST['idsecteur']
    echo'document.formulaire.secteur['.$idsecteur.'].selected=true';
}


Par contre, pour mes photos, la value que je récupere via PHP au rechargement de la page ne correspond pas au numéro d'option du tableau parce que j'ai mis comme value les ID des photos de la BDD

Smiley biggol je sais c'est un peu barbare.

Enfin, bon ca marche comme j'ai fait et il y aurait bien une autre solution :

Ne plus travailler au départ avec les ID de mes photos dans les value de mes options, mais travailler avec un chiffre qui correspondrait au numéro d'option de la liste créée.
Je devrais juste faire une requete en plus apres dans MySql pour récuperer l'ID de la photo dont le nom est...

donc, laissons tomber parce que ca marche comme ca.

Par contre j'ai un autre petit prob qui doit être tout bête:

Pour vérifier si l'utilisateur n'a pas sélectionné les mêmes photos, j'ai créé une petite fonction qui se déclenche lors du submit du formulaire:

<form name="formulaire" method="post" 
action="testrefreshlistes.php" onsubmit="TestDoublon()">


Et la fonction :


function TestDoublon(){
	le_selectionne1=document.formulaire.idphoto1.options.selectedIndex;
	le_selectionne2=document.formulaire.idphoto2.options.selectedIndex;
	le_selectionne3=document.formulaire.idphoto3.options.selectedIndex;
	if(    (le_selectionne1==le_selectionne2 && le_selectionne1 != 0) 
		|| (le_selectionne1==le_selectionne3 && le_selectionne1 != 0)
		|| (le_selectionne2==le_selectionne3 && le_selectionne3 != 0)    
	   ){
	   alert('Vous avez sélectionné deux fois la même photo');
	   return false;
	}
	alert('ca a l air correct');
	return true;
}

Y a rien de spécial dans la fonction si ce n'est que je vérifie dans le if si l'option n'est pas l'option 0 car l'utilisateur n'est pas obligé de choisir une photo.

Le problème est qu'apres avoir exécuté la fonction et affiché le ALERT,
la page se rafraichi quand même. Je pensais qu' avec le return false, la page ne devait pas se rafraichir.

PS: je n'ai pas mis tout le code parce que c'est assez long, mais si ca interesse quelqu'un pour se prendre la tete dessus ou parce qu'il en a besoin, y a pas de probleme je la mettrai.
Modifié par gabnico (02 Jun 2005 - 11:00)
Et si tu mettais return juste apres ton onsubmit ????
comme ca:
onsubmit="return TestDoublon();">


Smiley biggol ducon