Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2902 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Filtrer des résultats d'une recherche sans rafraîchir toute la page

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Filtrer des résultats d'une recherche sans rafraîchir toute la page

n°1440958
idy
Posté le 12-09-2006 à 14:27:03  profilanswer
 

J'essaye de filtrer les résultats dynamiquement d'une requête PHP/MySQL. Merci pour votre aide.
 
[1] Table :
Column A | Column B  
car | blue  
car | red  
car | blue  
truck | blue  
truck | red  
truck | green  
 
[2] Barre de recherche : recherche dans colonne A et retourne les résultats trouvés :  
si on cherche "car" :  
car | blue  
car | red  
car | blue  
 
Cette étape [2] est une requête PHP/MySQL standard qui ne me pose pas de problème.
 
[3] Si maintenant un checkbox permet de filtrer les résultats en fonction de la couleur : j'ai essayé de donner le même ID (=couleur) à chaque ligne de résultat, puis rien mis dans le <div> correspondant quand la case est décochée, mais cela ne marche que pour le premier résultat de chaque couleur, chaque ID devant être unique.
 
C'est un cas assez classique il me semble de rafraîchissement des résultats d'une requête sans rafraîchir toute la page, en javascript / ajax.
 
Merci beaucoup pour votre aide ou pour les liens vers des bouts de scripts existants.

mood
Publicité
Posté le 12-09-2006 à 14:27:03  profilanswer
 

n°1441173
anapajari
s/travail/glanding on hfr/gs;
Posté le 12-09-2006 à 16:21:18  profilanswer
 

bon j'ai eu besoin d'un truc a peu près similaire y'a pas longtemps, donc j'ai viré plein de truc que te servirait à rien et un peu adapté, ça doit marcher en gros comme tu veux ( mais il doit rester des modifs à faire)...

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Exemple</title>
  7.   <script type="text/javascript">
  8.   function init(){
  9.     var trNodes = document.getElementById('results').getElementsByTagName('tr');
  10.     var resNodes = new Array();
  11.     for(var i=0; i<trNodes.length; i++){
  12.       if (trNodes[i].childNodes[0].tagName == 'TH'){
  13.         var thNodes = trNodes[i].getElementsByTagName('th');
  14.         for(var j=0; j<thNodes.length; j++){
  15.           Filter.prototype.fields.push(thNodes[j].innerHTML);
  16.         }
  17.       } else if ( trNodes[i].childNodes[0].tagName == 'TD'){
  18.         resNodes.push(trNodes[i]);
  19.         var tdNodes = trNodes[i].getElementsByTagName('td');
  20.         for(var j=0;j<tdNodes.length; j++){
  21.           trNodes[i].setAttribute(Filter.prototype.fields[j], tdNodes[j].innerHTML);
  22.         }
  23.       }
  24.     }
  25.     var cf = new Filter('cf', 'color', resNodes);
  26.     var tf = new Filter('tf', 'type', resNodes);
  27.   }
  28.   function Filter(obj, field, nodes){
  29.     this.nodes = nodes;
  30.     this.node = document.getElementById(obj)||obj; //gatsu's style
  31.     this.node.innerHTML='<option value="">ALL</option>';
  32.     var fIndex = Filter.prototype.fields.indexOf(field);
  33.     this.values = new Array();
  34.     for(var i=0; i<nodes.length; i++){
  35.       if ( this.values.indexOf(nodes[i].getElementsByTagName('td')[fIndex].innerHTML) == -1){
  36.           this.values.push(nodes[i].getElementsByTagName('td')[fIndex].innerHTML);
  37.           var optNode = document.createElement('option');
  38.           optNode.value = nodes[i].getElementsByTagName('td')[fIndex].innerHTML;
  39.           optNode.innerHTML = nodes[i].getElementsByTagName('td')[fIndex].innerHTML;
  40.           this.node.appendChild(optNode);
  41.       }
  42.     }
  43.     var self = this; //mIRROR's style
  44.     this.node.onchange = function(e){
  45.       self.display(field, this.options[this.options.selectedIndex].value);
  46.     }
  47.   }
  48.   Filter.prototype.display = function (field, value){
  49.     Filter.prototype.activeFilters[field] = value;
  50.     for(var i=0; i<this.nodes.length; i++){
  51.       toDisplay = true;
  52.       for(filter in Filter.prototype.activeFilters){
  53.         if ( Filter.prototype.activeFilters[filter] != ''){
  54.           if (this.nodes[i].getAttribute(filter) != Filter.prototype.activeFilters[filter]){
  55.             toDisplay = false;
  56.           }
  57.         }
  58.       }
  59.       if( toDisplay){
  60.         this.nodes[i].style.visibility = 'visible';
  61.       } else {
  62.         this.nodes[i].style.visibility = 'hidden';
  63.       }
  64.     }
  65.   }
  66.   Filter.prototype.fields = new Array();
  67.   Filter.prototype.activeFilters = new Array();
  68.   window.onload = init;
  69.   </script>
  70. </head>
  71. <body>
  72.   <form action="pouet" method="post">
  73.   color:
  74.    <select name="color" id="cf">
  75.      <option value="">ALL</option>
  76.      <!-- full color list-->
  77.    </select>
  78.    type:
  79.    <select name="type" id="tf">
  80.      <option value="">ALL</option>
  81.      <!-- full type list-->
  82.    </select>
  83.   </form>
  84. <table id="results" summary="query results">
  85.   <tr><th>type</th><th>color</th></tr>
  86.   <tr id="r1"><td>car</td><td>blue</td>
  87.   <tr id="r2"><td>car</td><td>red</td>
  88.   <tr id="r3"><td>car</td><td>green</td>
  89.   <tr id="r4"><td>truck</td><td>blue</td>
  90.   <tr id="r5"><td>truck</td><td>red</td>
  91.   <tr id="r6"><td>truck</td><td>green</td>
  92. </table>
  93. </body>
  94. </html>


Si tu veux des explications sur un point précis demande!  
Si tu veux des explications sur tout, je passe mon tour ;)
 
edit:
Ah oui, l'idée c'est que les "<!-- full type|color list-->" soient quand même générées par ton serveur, si bien que si le js est desactivé tu aies tout de même des valeurs.  
Pour la même raison, si tu valides le formulaire tu ne dois afficher que les bons résultats ( mais coté serveur).


Message édité par anapajari le 12-09-2006 à 16:23:39
n°1441248
idy
Posté le 12-09-2006 à 16:55:05  profilanswer
 

ok cool, je vais étudier tout cela en détail. Merci beaucoup.

n°1441549
gatsu35
Blablaté par Harko
Posté le 13-09-2006 à 09:54:05  profilanswer
 

Citation :


this.node = document.getElementById(obj)||obj; //gatsu's style


:D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Filtrer des résultats d'une recherche sans rafraîchir toute la page

 

Sujets relatifs
Récupération d'information d'une page HMTL[Résolu][ASP.NET 2.0][C#] Plusieurs load pour une meme page
Récupérer résultats d'une rechercheCharger une page dans un div?
Panneau coulissant venant de dehors la page ?Envoyer un mail (pas avec mailto) depuis une page JSP
Ouvrir une page dans un <div id=""> en XHTML ?Recherche controle utilisateur "jauge"
Recherche de fichiers 
Plus de sujets relatifs à : Filtrer des résultats d'une recherche sans rafraîchir toute la page


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR