[Javascript]Objet attendu

Résolu
lomic2 Messages postés 14 Statut Membre -  
lomic2 Messages postés 14 Statut Membre -
Bonjour,

un petit problème qui devrait être simple à résoudre:

objectif:
recharger un tableau en gardant les éléments d'une catégorie choisie dans une liste déroulante

la fonction js:

<!--
function tri(categorie) {
if (categorie.liste_cat.selectedIndex != 0)
var cat=categorie.liste_cat.options[categorie.liste_cat.selectedIndex].value;
document.location.href = ("http://mon_url/affich_liste.php?obj_cat="+cat;
}
--></script>

le formulaire:

<FORM ACTION="" METHOD=POST name="choix_categorie">
<SELECT name="liste_cat" onChange="tri(this.form)">
<OPTION SELECTED>Toutes</OPTION>
<?
WHILE($res_cat!=$j){
$cat= mysql_result($req_cat,$j,"obj_cat");
?>
<OPTION VALUE="<? echo $cat ?>"><? echo $cat ?></OPTION>
<?
$j++;
}
?>
</SELECT>
</FORM>

J'extrais d'une table de ma base les éléments à lister dans le tableau, ils font partie de plusieurs catégories, je souhaite permettre à l'utilisateur de choisir de voir une catégorie, au moyen d'une liste déroulante.

Lorsqu'il change la catégorie, je recharge la page, en donnant une valeur à la variable obj_cat qui me sert de clé de tri lorsqu'elle est définie.

Actuellement, à chaque fois j'ai une erreur js: Objet attendu, qui pointe sur la ligne: <SELECT name="liste_cat" onChange="tri(this.form)"> (caractère 1)

Et je ne parviens pas à faire fonctionner l'ensemble.

Si quelqu'un peut me donner un coup de pouce.

Merci
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Lorsque tu écris ça : "<SELECT name="liste_cat" onChange="tri(this.form)">", le "this" point sur l'élément SELECT. this.form n'existe donc pas...

    Je te conseille de modifier tout ça en mettant :

    <script language="javascript"><!--
    function tri(categorie) {
    if (categorie != "#all")
    {
      document.location.href = "http://mon_url/affich_liste.php?obj_cat="+categorie;
    }
    --></script>
    <FORM ACTION="" METHOD=POST name="choix_categorie">
      <SELECT name="liste_cat" onChange="tri(this.options[this.selectedIndex].value)">
        <OPTION SELECTED value="#all">Toutes</OPTION>
    <?
    WHILE($res_cat!=$j){
    $cat= mysql_result($req_cat,$j,"obj_cat");
    ?>
        <OPTION VALUE="<? echo $cat ?>"><? echo $cat ?></OPTION>
    <?
    $j++;
    }
    ?>
      </SELECT>
    </FORM> 
    1
  2. lomic2 Messages postés 14 Statut Membre
     
    Merci beaucoup, ça fonctionne :)

    Il ne me reste plus qu'à gérer un détail... mes catégories sont des chaines comportant des espaces... la redirection en Php les digère mal mais ça devrait être vite réglé :)

    Encore merci pour cette réponse aussi rapide qu'efficace.
    0
  3. lomic2 Messages postés 14 Statut Membre
     
    Ah par contre je vois que je ne peux pas réafficher l'ensemble des catégories.

    J'ai donc ajouté la ligne suivante:

    if (categorie == "#all"){
    document.location.href = "http://monurl/affich_liste.php";
    }

    Cependant quand je cliques sur "Toutes" la page ne se recharge pas.

    J'ai essayé en modifiant aussi le champ option du formulaire:
    <OPTION value="#all">Toutes</OPTION> (enlevé le "selected")

    Mais pas moyen de ré-afficher la page avec toutes les catégories.

    Un 2eme coup de pouce?

    Merci.
    0
  4. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Si on reprend ton code php, le mieux serait en fait de sélectionner l'élément qui a été choisi par l'utilisateur. C'est mieux pour l'utilisateur, et ça permettra d'activer le "onchange" si on veut revenir à "TOUT".
    FORM ACTION="" METHOD=POST name="choix_categorie">
      <SELECT name="liste_cat" onChange="tri(this.options[this.selectedIndex].value)">
    <?
    if (isset($_GET["obj_cat"]))
    {
      $obj_cat = $_GET["obj_cat"];
      $selected = "";
    }
    else
    {
      $obj_cat = "";
      $selected = "selected";
    }
    
    echo "<OPTION value=\"#all\" $selected >Toutes</OPTION>";
    
    WHILE($res_cat!=$j){
    $cat= mysql_result($req_cat,$j,"obj_cat");
    if ($cat == $obj_cat)
    {
      $selected = "selected";
    }
    else
    {
      $selected = "";
    }
    
    echo "<OPTION VALUE=\"".$cat."\" $selected >".$cat."</OPTION>";
    
    $j++;
    }
    ?>
      </SELECT>
    </FORM>
    Voilà, le principe est donc de sélectionner uniquement l'élément qui a été sélectionné par l'utilisateur (si existant), et l'élément par défaut sinon.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lomic2 Messages postés 14 Statut Membre
     
    ok, je comprend, merci pour le tuyau n°2

    j'ai du faire quelques modifs puisqu'ensuite je testais si $obj_cat était set ou non, et vu qu'il est setté à "", je ne passais plus que dans le cas isset($obj_cat)=true, où j'utilisais $obj_cat pour construire une requète.

    Maintenant je teste la longueur du contenu de la variable, si elle est nulle, je construis ma requète sans $obj_cat :)

    et ça marche au poil, merci Reivax :D
    0