[javascript][php] recherche liste multiple
Résolu/Fermé
rachidaaa
Messages postés
4
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
22 août 2007
-
25 juin 2007 à 16:12
rachidaaa Messages postés 4 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 22 août 2007 - 22 août 2007 à 15:18
rachidaaa Messages postés 4 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 22 août 2007 - 22 août 2007 à 15:18
A voir également:
- [javascript][php] recherche liste multiple
- Liste déroulante excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Liste déroulante en cascade - Guide
- Telecharger javascript - Télécharger - Langages
- Recherche adresse - Guide
3 réponses
rachidaaa
Messages postés
4
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
22 août 2007
3
22 août 2007 à 11:53
22 août 2007 à 11:53
voici un code qui pourrait t'aider.
mais mon problème c'est qu'il sélectionne automatiquement le mot commençant par les lettres que tu saisis et ce à chaque fois que tu saisies une lettre supplémentaire du mot que tu recherches.
Moi j'ai besoin d'un code de ce genre mais sans la sélection. Pour être plus claire, j'ai besoin de saisir les premières lettres d'un mot et la liste multiple doit se positionner sur le premier mot qui commence par les lettres saisies mais sans le sélectionner.
Si qq1 peut m'aider à améliorer mon code pour qu'il réponde à mes besoins ça m'arrangerait.
Merci
Voici le code source :
<html>
<head> <title> recherche rapide en tapant qq lettre d'une chaine se trouvant dans une liste multiple sans recharger la page</title> </head>
<script language="javascript">
/*
* fonction qui cherche un texte dans un tableau
* @return true si le texte est trouvé
* @return false sinon
* @param texte : le texte a chercher
* @param tab1 : le tableau dans lequel on recherche le texte
*
*/
function searchTexteDansTab(tab1,texte)
{
maListe = (document.getElementsByName('candidat[]'))[0]; //le champ select qui nous interesse
trouve = 0; i = 0;
while (i<tab1.length && !trouve) //tant qu'on a pas trouvé et que le parcours du tableau n'est pas fini
{
if(texte!="")
{
var aux=new RegExp ("^"+texte,"i");
if(tab1[i].match(aux))
{
//alert(tab1[i].match(aux)+"___"+texte);
//il faut mettre en subrillance cette entrée dans le champ select du formulaire
var aux2 = i; //alert(aux2);
maListe.options[aux2].selected=true;
trouve=1;
}
}
i++;
}
}
</script>
<body>
<?php
require('../configuration.php');
$link=connexion();
?>
<form name="form1" action="searchListeMultipleSansRecharger.php" method="POST">
<h2><u> Rattachement du candidat sélectionné pour cette mission </u> </h2>
<input type="text" onKeyUp="searchTexteDansTab(nomCandidat,this.value)"> <br>
<?php
$chaine = "select c.nom,c.prenom,c.id,f.intitule from candidat as c,formation as f where c.idformation=f.id order by nom asc ";
$req = requeteConsultation($chaine,$link); $nb = mysql_num_rows($req);
echo "<select name='candidat[]' size = '15' multiple> </option>";
for($i=0;$i<$nb;$i++)
{
$nom = mysql_result($req,$i,0); $prenom = mysql_result($req,$i,1); $idCandidat = mysql_result($req,$i,2);$formation = mysql_result($req,$i,3);
$nomCandiat[]=$nom; // on remplit le tableau pour faire une rechercher rapide à l'aide des qq 1ères lettres du nom
echo "<option value='".$idCandidat."' ";
if( !empty($_POST['candidat']) && ($_POST["candidat"] == $idCandidat) ) {echo "SELECTED";}
echo ">".$nom."_".$prenom."__".$formation."</option>";
}// boucle sur tous les candidats de la base
echo "</select> ";
//transformation variable php en Javascript
$nomCandidat_js = isset($nomCandiat)? php2js($nomCandiat):"''";
?>
<script language="JavaScript">
var nomCandidat = <?php echo $nomCandidat_js; ?>;
</script>
</form>
</body>
</html>
mais mon problème c'est qu'il sélectionne automatiquement le mot commençant par les lettres que tu saisis et ce à chaque fois que tu saisies une lettre supplémentaire du mot que tu recherches.
Moi j'ai besoin d'un code de ce genre mais sans la sélection. Pour être plus claire, j'ai besoin de saisir les premières lettres d'un mot et la liste multiple doit se positionner sur le premier mot qui commence par les lettres saisies mais sans le sélectionner.
Si qq1 peut m'aider à améliorer mon code pour qu'il réponde à mes besoins ça m'arrangerait.
Merci
Voici le code source :
<html>
<head> <title> recherche rapide en tapant qq lettre d'une chaine se trouvant dans une liste multiple sans recharger la page</title> </head>
<script language="javascript">
/*
* fonction qui cherche un texte dans un tableau
* @return true si le texte est trouvé
* @return false sinon
* @param texte : le texte a chercher
* @param tab1 : le tableau dans lequel on recherche le texte
*
*/
function searchTexteDansTab(tab1,texte)
{
maListe = (document.getElementsByName('candidat[]'))[0]; //le champ select qui nous interesse
trouve = 0; i = 0;
while (i<tab1.length && !trouve) //tant qu'on a pas trouvé et que le parcours du tableau n'est pas fini
{
if(texte!="")
{
var aux=new RegExp ("^"+texte,"i");
if(tab1[i].match(aux))
{
//alert(tab1[i].match(aux)+"___"+texte);
//il faut mettre en subrillance cette entrée dans le champ select du formulaire
var aux2 = i; //alert(aux2);
maListe.options[aux2].selected=true;
trouve=1;
}
}
i++;
}
}
</script>
<body>
<?php
require('../configuration.php');
$link=connexion();
?>
<form name="form1" action="searchListeMultipleSansRecharger.php" method="POST">
<h2><u> Rattachement du candidat sélectionné pour cette mission </u> </h2>
<input type="text" onKeyUp="searchTexteDansTab(nomCandidat,this.value)"> <br>
<?php
$chaine = "select c.nom,c.prenom,c.id,f.intitule from candidat as c,formation as f where c.idformation=f.id order by nom asc ";
$req = requeteConsultation($chaine,$link); $nb = mysql_num_rows($req);
echo "<select name='candidat[]' size = '15' multiple> </option>";
for($i=0;$i<$nb;$i++)
{
$nom = mysql_result($req,$i,0); $prenom = mysql_result($req,$i,1); $idCandidat = mysql_result($req,$i,2);$formation = mysql_result($req,$i,3);
$nomCandiat[]=$nom; // on remplit le tableau pour faire une rechercher rapide à l'aide des qq 1ères lettres du nom
echo "<option value='".$idCandidat."' ";
if( !empty($_POST['candidat']) && ($_POST["candidat"] == $idCandidat) ) {echo "SELECTED";}
echo ">".$nom."_".$prenom."__".$formation."</option>";
}// boucle sur tous les candidats de la base
echo "</select> ";
//transformation variable php en Javascript
$nomCandidat_js = isset($nomCandiat)? php2js($nomCandiat):"''";
?>
<script language="JavaScript">
var nomCandidat = <?php echo $nomCandidat_js; ?>;
</script>
</form>
</body>
</html>
Une solution sans recharger la page.
Ajax/javascript
Sur le onKeyUp de ton champ texte tu appelles une fct Ajax qui lance une requette en arrière plan vers un script PHP qui lira dans la BD les noms commençant par les lettres tapées.
La réponse sous forme d'une liste <select serra chargée dans ta page dans un div avec seulement les noms concernés.
Tu as peut être vu ça lorsque tu recherches sur Google dans la petite fenêtre en haut de ton navigateur.
Pour la solution Ajax vas voir sur Google.
Sinon j'ai un exemple.
Ajax/javascript
Sur le onKeyUp de ton champ texte tu appelles une fct Ajax qui lance une requette en arrière plan vers un script PHP qui lira dans la BD les noms commençant par les lettres tapées.
La réponse sous forme d'une liste <select serra chargée dans ta page dans un div avec seulement les noms concernés.
Tu as peut être vu ça lorsque tu recherches sur Google dans la petite fenêtre en haut de ton navigateur.
Pour la solution Ajax vas voir sur Google.
Sinon j'ai un exemple.
rachidaaa
Messages postés
4
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
22 août 2007
3
22 août 2007 à 15:18
22 août 2007 à 15:18
Merci pour ta réponse, ça donne des idées.
J'ai entre temps trouvé ma réponse.
J'ai juste ajouté la ligne qui suit dans mon code pour que ça réponde exactement à ce que je veux:
maListe.options[aux2].selected=false;
juste après la ligne : maListe.options[aux2].selected=true;
de cette façon, je suis à la bonne position dans la liste multiple mais l'entrée n'est pas sélectionnée
J'ai entre temps trouvé ma réponse.
J'ai juste ajouté la ligne qui suit dans mon code pour que ça réponde exactement à ce que je veux:
maListe.options[aux2].selected=false;
juste après la ligne : maListe.options[aux2].selected=true;
de cette façon, je suis à la bonne position dans la liste multiple mais l'entrée n'est pas sélectionnée