Tri à la volé


Voici un exemple proposé par Bruno LANCIAU utilisant le Javascript.

default.asp
<html>

<head>
<title> Java script </title>

</head>

<body>


<H2><font color="#800000">Selection de paramètres par échanges de listes</font></H2>


<P align="left">

<!-- L'ensemble des composants utilisés est défini dans une "form" en HTML (2 étiquettes, 2 boites de liste et 3 boutons -->
<FORM name="choixmultipl">

<!--Pour des raisons de présentation je mets mes composants dans un tableau-->
<table border="1" width="60%" bordercolor="#FFFFFF">
<tr>

<td width="25%" bordercolor="#FFFFFF">
<p align="center">
<B><font color="#0000FF"> Mots clés possibles:</font></B> <!--1iere étiquette-->
</td>

<td width="5%" rowspan="2">
<p align="center"> <!--Création de 2 boutons dans la même cellule-->
<input type="button" onClick="ajouter()" value=">>"> <!--Un clic sur ce bouton démarre la fonction javaScript "ajouter()" -->
</p>
<p align="center">
<input type="button" onClick="enlever()" value="<<"> <!--Un clic sur ce bouton démarre la fonction javaScript "enlever()" -->
</td>

<td width="25%">
<p align="center">
<B><font color="#0000FF">Mots clés choisis:</font></B> <!--2ieme étiquette-->

</td>
</tr>
<tr>
<td width="25%">
<p align="center">

<!--
ci-dessous la première liste. Comme je n'ai pas compris comment fixer la taille de la fenêtre, j'ai
utilisé les artifices suivants:
* j'ai fixé la taille(i.e le nombre d'éléments à nombre d'éléments utiles =1)
* Le dernier élément à la valeur vide et présente une chaîne d'espaces (&nbsp) qui fixe la largeur
* le centrage les textes des éléments est fait en rajoutant un certain nombre d'espaces devant chaque texte.
-->

<select name="liste_mc" size=7 ondblclick="ajouter()" > <!--Un double-clic sur élément démarre la
fonction javaScript "ajouter()" -->
<div align="center">
<option value="roux"><div align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roux </div>  
<option value="blond">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blond
<option value="chatain">&nbsp;&nbsp;&nbsp;chatain
<option value="brun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brun
<option value="gris">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gris
<option value="blanc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blanc
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
</select>


</td>
<td width="25%">
<p align="center">

<!--
ci-dessous la deuxième liste. Pour qu'elle ait la même apparence que la première je lui ai donné la même
taille et l'ai rempli d'éléments vides identiques au dernier élément de la liste 1.
-->
<select name="choix_mc" size=7 ondblclick="enlever()"> <!--Un double-clic sur élément démarre la
fonction javaScript "enlever()" -->
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp

</select>
</td>
</tr>
</table>
<p align="right">&nbsp;</p>

<p align="left"><input type="button" onClick="recu()" value=" Terminer " ></p>

<!--Un clic sur ce bouton démarre la fonction javaScript "recu()" -->

<Table>
<tr>
<td>
<p align="left">
</Table>
</FORM>

</body>


<!--
En dehors du corps HTML balisé par <body>...</body>, je définis le script JavaScript qui va traiter les événements définis plus haut
sur les composants dans la "FORM" HTML. Ces traitements correspondent à l'appel de 4 fonctions: ajouter(),enlever() ,recu() et ranger().
-->
<!--******->
<script language="JavaScript">
//******// Initialisation des variables communes à toutes les fonctions

var motcles_choisis= new Array(7);
var motclesT_choisis= new Array(7);
var la_liste1 = window.document.choixmultipl.liste_mc ;
var la_liste2 = window.document.choixmultipl.choix_mc;
var position_list1 = la_liste1.options.length; // Pointeur sur la liste 1 à l'avant dernier élément (i.e. dernier élément utile)
var position_list2 = 0; // Pointeur sur la liste 2 au premier élément

//**ranger();
//******
function ajouter()
{
for (loop=0 ; loop < la_liste1.options.length ; loop++) // Boucle sur tous les indices (loop) de la liste 1, du premier au dernier.
{

if (la_liste1.options[loop].selected == true) // Vérifie que l'élément d'indice (loop) de la liste 1 est bien celui selectionné.
{

if (la_liste1.options[loop].value != "") // Vérifie que la valeur de cet élément n'est pas vide.
{
motcles_choisis[loop]=la_liste1.options[loop].value; // Met cette valeur dans la liste des éléments choisis.
motclesT_choisis[loop]=la_liste1.options[loop].text; // Met celabel dans la liste des éléments choisis.

la_liste2.options [position_list2]=new Option (motclesT_choisis[loop],motcles_choisis[loop],false,false) ;
// Remplace l'élément de rang courant de la liste 2 par ce dernier élément choisi.
position_list2++ ; // Repositionne le pointeur de la liste 2 sur l'élément suivant.
position_list1-- ; // Repositionne le pointeur de la liste 1 sur l'élément précedent
for(i=loop; i<position_list1; i++) // Boucle sur tous les indices au-dessus de l'élément selectionné dans la liste 1
{
la_liste1.options[i]=new Option ( la_liste1.options[i+1].text,la_liste1.options[i+1].value,false,false);
//Décalle chacun des éléments concernés d'un rang vers le bas l'élément vide de formattage en fin de liste vient
//effacer l'élément qui le précède.
}
}
}
}
ranger();
}

//********

function enlever()
{
for (loop=0 ; loop < la_liste2.options.length ; loop++) // Boucle sur tous les indices (loop) de la liste 2, du premier au dernier.
{
if (la_liste2.options[loop].selected == true) // Vérifie que l'élément d'indice (loop) de la liste 2 est bien celui selectionné.
{
if (la_liste2.options[loop].value != "") // Vérifie que la valeur de cet élément n'est pas vide.
{
motcles_choisis[loop]=la_liste2.options[loop].value; // Met cette valeur dans la liste des éléments choisis.
motclesT_choisis[loop]=la_liste2.options[loop].text; // Met ce label dans la liste des éléments choisis.
la_liste1.options[(position_list1-1)]=new Option (motclesT_choisis[loop],motcles_choisis[loop],false,false) ;
// Remplace l'élément de rang -1 de la liste 1 par ce dernier élément choisi.
position_list2-- ; // Repositionne le pointeur de la liste 2 sur l'élément précedent
position_list1++ ; // Repositionne le pointeur de la liste 1 sur l'élément suivant.
for(i=loop; i<position_list2+1; i++) // Boucle sur tous les indices au-dessus de l'élément selectionné dans la liste 2
{
la_liste2.options[i]=new Option ( la_liste2.options[i+1].text,la_liste2.options[i+1].value,false,false);
//Décalle chacun des éléments concernés d'un rang vers le bas l'élément vide de formattage en fin de liste vient
//effacer l'élément qui le précède.
}
}
}
}
ranger();
}

//******
function recu()
{
var message="liste selectionnée: \n\t" // Initialise la variable message
for (i=0 ; i < la_liste2.options.length ; i++) // Boucle sur tous les éléments de la liste 2.
{
if (la_liste2.options[i].value != "") // Quand la valeur de l'élément n'est pas vide
{
message += la_liste2.options[i].value + "\n\t" ; // Je rajoute à message la valeur de l'élément suivi d'un retour à la ligne
// et d'une tabulation.
}
}
alert(message); // J'ouvre une boite "Alert" avec le message "message".
}

//******
function ranger() //permet d'ordonner les listes par ordre alphabetique
{
lo1=new Array(la_liste1.options.length);//tableau pour la liste1
lo2=new Array(la_liste2.options.length);//tableau pour la liste2

for (i=0;i<la_liste1.options.length ; i++) //pour chaque element de la liste 1
{
lo1[i]=new Array(2); //simule un tableau à 2 dimensions (valeur et étiquette)
lo1[i][0]=la_liste1.options[i].value; //remplit le tableau avec chaque
lo1[i][1]=la_liste1.options[i].text; //element de la liste 1
}

for (i=0;i<la_liste2.options.length ; i++) //pour chaque element de la liste 2
{
lo2[i]=new Array(2); //simule un tableau à 2 dimensions (valeur et étiquette)
lo2[i][0]=la_liste2.options[i].value; //remplit le tableau avec chaque
lo2[i][1]=la_liste2.options[i].text; //element de la liste 2
}


j1=0;
lo1triee= lo1.sort(); //ordonne le tableau cree dans un nouveau tableau: lo1triee
for (i=0;i<la_liste1.options.length ; i++) //Pour tous les elements de ce tableau
{
if (lo1triee[i][0] != "") //et tand que l'element n'est pas vide
{
la_liste1.options[j1]=new Option (lo1triee[i][1],lo1triee[i][0],false,false);//je reecrit la liste 1
j1++;
}
}


j2=0;
lo2triee= lo2.sort(); //ordonne le tableau cree dans un nouveau tableau: lo2triee
for (i=0;i<la_liste2.options.length ; i++) //Pour tous les elements de ce tableau
{
if (lo2triee[i][0] != "") //et tand que l'element n'est pas vide
{
la_liste2.options[j2]=new Option (lo2triee[i][1],lo2triee[i][0],false,false);//je reecrit la liste 1
j2++;
}
}


}

//******
</script>
<!--*****-->


</html>

Téléchargez le code

[Précédent] [Retour] [Suite]