liste déroulantes et récupération de valeurs
Posté : 23 août 2012, 13:10
Bonjour à toutes et à tous, j'ai grâce à un script en javascript une liste qui en alimente une deuxième. La première est alimentée par une requête mysql.
Le soucis c'est lorsque je valide le formumlaire, la récupération des données de la seconde liste ne se fait pas, en effet le script ne récupère que la dernière valeur ajoutée.
Voici le code qui donne les listes:
[javascript]<script type="text/javascript">
function selection_champs(champs,champs_affiche){
//on récupère l'endroit sélectionner dans le select source
selection = champs.selectedIndex;
if(selection != -1){
//on déselectionne tous les champs du select de destination où va être placer le(s) champ(s) selectionner
while(champs_affiche.selectedIndex != -1){
champs_affiche.options[champs_affiche.selectedIndex].selected = false;
}
while(champs.selectedIndex > -1){
if(champs.options[champs.selectedIndex].value == "Id_type_bien"){
champs.options[champs.selectedIndex] = null;
champs.form.Id_categorie_bien.options[0].select= true;
}else{
//on cherche la place de notre champ
for(place=0;place<champs_affiche.length;place++){
if(champs_affiche.options[place].text > champs.options[champs.selectedIndex].text){
break;
}
}
//on décale tous les champs
for(i=champs_affiche.length;i>place;i--){
champs_affiche.options = new Option(champs_affiche.options[(i-1)].text,champs_affiche.options[(i-1)].value);
}
//on insère le champ selectionner
champs_affiche.options[place] = new Option(champs.options[champs.selectedIndex].text,champs.options[champs.selectedIndex].value);
champs.options[champs.selectedIndex] = null;
champs_affiche.options[place].selected = true;
}
}
if(champs.length > 0){
if(selection >= champs.length ){
selection = champs.length-1;
}
champs.options[selection].selected = true;
}
}
}
function select_all(frm){
for(i=0;i<frm.liste_champs.length;i++){
frm.liste_champs.options.selected = true;
}
frm.liste_champs.name = "liste_champs[]";
for(i=0;i<frm.selection.length;i++){
frm.selection.options.selected = true;
}
frm.selection.name = "selection[]";
}
function priorite_champ(selection,mode){
if(selection.length < 2 ){return;}
old_place = selection.selectedIndex;
if(mode == 'up' && old_place > 0){
new_place = old_place-1;
}else if(mode == 'down' && old_place < selection.length-1){
new_place = old_place+1;
}
tmp = new Option(selection.options[new_place].text,selection.options[new_place].value);
selection.options[new_place] = new Option(selection.options[old_place].text,selection.options[old_place].value);
selection.options[old_place] = new Option(tmp.text,tmp.value);
selection.options[new_place].selected = true;
}
</script>[/javascript]
Par avance merci pour votre aide.
Le soucis c'est lorsque je valide le formumlaire, la récupération des données de la seconde liste ne se fait pas, en effet le script ne récupère que la dernière valeur ajoutée.
Voici le code qui donne les listes:
<label>Comptes en gestion</label><table>
<tr>
<td>
<select name="liste_champs" size="15" multiple class="multiple" OnDblClick="javascript:selection_champs(this.form.liste_champs,this.form.selection)" >
<?php $sql="SELECT * FROM `client`" ;
$result=mysql_query($sql) or die;
while($data=mysql_fetch_assoc($result))
{?>
<option value="<?php echo $data['code_client'] ; ?>">(<?php echo $data['code_client'] ; ?>) <?php echo $data['raison_sociale'] ; ?></option>
<?php }?>
</select>
</td>
<td>
<table>
<tr><td><input class="bouton" type="button" name="selectionner" value=" >> " OnClick="javascript:selection_champs(this.form.liste_champs,this.form.selection)"></td></tr>
<tr><td><input class="bouton" type="button" name="deselect" value=" << " OnClick="javascript:selection_champs(this.form.selection,this.form.liste_champs)"></td></tr>
</table>
</td>
<td><select name="selection" size="15" multiple class="multiple" OnDblClick="javascript:selection_champs(this.form.selection,this.form.liste_champs)"></select></td>
<td>
<table>
<tr><td><input class="bouton" type="button" name="up" value=" + " OnClick="javascript:priorite_champ(this.form.selection,'up')"></td></tr>
<tr><td><input class="bouton" type="button" name="down" value=" - " OnClick="javascript:priorite_champ(this.form.selection,'down')"></td></tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
et le javascript si ça peut aider, bien que je doute que le problème vienne de la. j'ai un peu plus de 1000 données qui viennent alimenter la première liste.[javascript]<script type="text/javascript">
function selection_champs(champs,champs_affiche){
//on récupère l'endroit sélectionner dans le select source
selection = champs.selectedIndex;
if(selection != -1){
//on déselectionne tous les champs du select de destination où va être placer le(s) champ(s) selectionner
while(champs_affiche.selectedIndex != -1){
champs_affiche.options[champs_affiche.selectedIndex].selected = false;
}
while(champs.selectedIndex > -1){
if(champs.options[champs.selectedIndex].value == "Id_type_bien"){
champs.options[champs.selectedIndex] = null;
champs.form.Id_categorie_bien.options[0].select= true;
}else{
//on cherche la place de notre champ
for(place=0;place<champs_affiche.length;place++){
if(champs_affiche.options[place].text > champs.options[champs.selectedIndex].text){
break;
}
}
//on décale tous les champs
for(i=champs_affiche.length;i>place;i--){
champs_affiche.options = new Option(champs_affiche.options[(i-1)].text,champs_affiche.options[(i-1)].value);
}
//on insère le champ selectionner
champs_affiche.options[place] = new Option(champs.options[champs.selectedIndex].text,champs.options[champs.selectedIndex].value);
champs.options[champs.selectedIndex] = null;
champs_affiche.options[place].selected = true;
}
}
if(champs.length > 0){
if(selection >= champs.length ){
selection = champs.length-1;
}
champs.options[selection].selected = true;
}
}
}
function select_all(frm){
for(i=0;i<frm.liste_champs.length;i++){
frm.liste_champs.options.selected = true;
}
frm.liste_champs.name = "liste_champs[]";
for(i=0;i<frm.selection.length;i++){
frm.selection.options.selected = true;
}
frm.selection.name = "selection[]";
}
function priorite_champ(selection,mode){
if(selection.length < 2 ){return;}
old_place = selection.selectedIndex;
if(mode == 'up' && old_place > 0){
new_place = old_place-1;
}else if(mode == 'down' && old_place < selection.length-1){
new_place = old_place+1;
}
tmp = new Option(selection.options[new_place].text,selection.options[new_place].value);
selection.options[new_place] = new Option(selection.options[old_place].text,selection.options[old_place].value);
selection.options[old_place] = new Option(tmp.text,tmp.value);
selection.options[new_place].selected = true;
}
</script>[/javascript]
Par avance merci pour votre aide.