IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

fonction de tri d'un input avec onkeyup


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut fonction de tri d'un input avec onkeyup
    Bonjour à tous.

    Je voudrais filtrer ma liste grace aux touches tapées par l'utilisateur. Actuellement je charge mon input de données sans problème.

    J'ai fait une petite procedure qui ne s'execute pas bien, la voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function recharge_list(rech_val){
    			if(rech_val !=""){
    				document.remb_pret.recharge.value = "O";
    				documents.remb_pret.submit();
    			}
    			else
    				document.remb_pret.recharge.value = "N";
    		}
    Elle est appelé ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <label for="rech_p">Recherche:</label>
    						<input name="rech_pret" type="text" id="rech_pret" value="" size="30" onkeyup="recharge_list(this.value);"/>
    afin de charger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <label for="lst_tache">Créancier(s):</label>
    						<select name="lst_tache" id="id_lst_tache" size="5" style="width:350px" onDblClick = "add_tache();" >
    							{section name=idx loop=$liste_creancier}
    								<option value="{$liste_creancier[idx].num_pret}">{$liste_creancier[idx].nom_adhe}** Prêt: {$liste_creancier[idx].num_pret}** Mont:{$liste_creancier[idx].capitale}</option> 
    							{/section}
    						</select>
    J'attend votre aide, merci

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Heu...
    La page est rechargée (submit) à *chaque caractère* entré dans ton input ?
    Tu as envisagé AJAX ? Parce que pour faire de l'autocomplétion, c'est quand même beaucoup plus adapté (si c'est bien ce que tu veux faire, je n'ai qu'une idée approximative pour le moment ^^)

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut
    Merci

    Je rencontre un problème pour resoudre ce problème: j'utilise AJAX, mais je suis buté face à initialiser mon input dont le voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <label for="tache_eff" id="id_tache_eff">libellé</label>
    							<select name="tache_eff" size="5" multiple="multiple" style="width:350px">
    							</select>
    Voici le bout de code pour vider ce champ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (var i=0; i<this.remb_pret.tache_eff.options.length; i++){ 
    						document.forms[0].tache_eff.options[i] = null;}
    Lorsque ce code est executé, au lieu de supprimer près de 256 données dans cet input, il supprime plustôt d'abord 3 enregistrements, après un certains nombre mais pas tout en un seul execution.

    Je souhaite vider tout le contenu de l'input en une seule execution. Merci

  4. #4
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    J'ai bien envie de t'aider, mais tu ne m'aides pas .
    On ne sait toujours pas ce que contient ton input avant ta tentative de suppression des données : poste-nous le code généré (code source visible dans un navigateur, pas le code serveur qui ne sert à rien ici) ou même si possible un lien vers le site en cours de construction, ça facilitera les choses

    Par contre, ici, il y a déjà un souci je crois :
    Citation Envoyé par BILANGA Voir le message
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (var i=0; i<this.remb_pret.tache_eff.options.length; i++){ 
       document.forms[0].tache_eff.options[i] = null;
    }
    ... parce que tu boucles sur le nombre d'éléments d'un objet mais tu accèdes aux propriétés d'un autre objet... ça ne peut pas coller.
    Et pour éviter ce genre de mésaventures, c'est quand même plus pratique de donner une propriété id à ton select, histoire de le référencer plus facilement.
    Essaie quelque chose comme :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var sel = document.getElementById("idDeTonSelect");
    for (var i = 0, iMax = sel.options.length; i < iMax; ++i) {
       sel.removeChild(sel.options[i]);
    }

    Et enfin :
    Citation Envoyé par BILANGA Voir le message
    j'utilise AJAX
    Heu... où ça ? ^^

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 265
    Points : 117
    Points
    117
    Par défaut
    voici le select ayant les données à supprimer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <label for="lst_tache">Créancier(s):</label>
    						<select name="lst_tache" id="id_lst_tache" size="5" style="width:350px" onDblClick = "add_tache();" >
    							{section name=idx loop=$liste_creancier}
    								<option value="{$liste_creancier[idx].num_pret}">{$liste_creancier[idx].nom_adhe}** Prêt: {$liste_creancier[idx].num_pret}** Mont:{$liste_creancier[idx].capitale}</option> 
    							{/section}
    						</select>
    Voici le code (AJAX) qui doit supprimer les données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function getXhr(){
    			var xhr = null;
    			if(window.XMLHttpRequest) 
    				xhr = new XMLHttpRequest();
    			else if(window.ActiveXObject){ 
    				try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
    			}
    			else { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; }
    			return xhr
    		}
     
    		function load_pret(nom_rech){
    			var xhr = getXhr()
    			xhr.onreadystatechange = function(){
    				if(xhr.readyState == 4 && xhr.status == 200){
    					for (var i=0; i<this.remb_pret.lst_tache.options.length; i++){ 
    						document.forms[0].lst_tache.options[i] = null;
    					}
    				}
    			}
    			xhr.open("POST","load_nom.php",true);
    			xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    			xhr.send('nom_creancier='+escape(document.getElementById('rech_pret').value)+'& type=load_pret');
    		}
    Mon problème est de pourvoir effacer tout le contenu du select lst_tache, car à l'état actuel il supprime une partie du contenu du select

  6. #6
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    le select que tu montres est toujours aussi indéchiffrable pour nous bilanga : poste du code HTML ou javascript, s'il te plait, comme je te l'ai déjà demandé, pour de nombreuses raisons c'est important.

    Cela dit, as-tu lu/essayé/compris/rejeté la piste que je t'ai proposé ? Parce que ta boucle de suppression des options du select a un défaut de construction, en effet, mais tu n'as pas l'air de l'avoir lu, étant donnée ta réponse...

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

Discussions similaires

  1. Problème avec la fonction de tri qsort
    Par Umlist dans le forum C
    Réponses: 2
    Dernier message: 19/06/2012, 08h53
  2. Pb avec la fonction SELECT (tri de données)
    Par benoit16 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/01/2008, 16h18
  3. Déplacer un élément Input avec une fonction
    Par gloumouth dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/03/2007, 14h13
  4. fonction de tri par introspection
    Par ned-flanders dans le forum C++
    Réponses: 7
    Dernier message: 21/10/2004, 11h49
  5. Réponses: 2
    Dernier message: 08/04/2004, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo