[Javascript]Objet attendu

Résolu/Fermé
lomic2 Messages postés 14 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 21 septembre 2012 - 22 janv. 2007 à 15:35
lomic2 Messages postés 14 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 21 septembre 2012 - 22 janv. 2007 à 16:57
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

5 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 janv. 2007 à 15:43
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
lomic2 Messages postés 14 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 21 septembre 2012
22 janv. 2007 à 15:52
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
lomic2 Messages postés 14 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 21 septembre 2012
22 janv. 2007 à 16:13
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
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 janv. 2007 à 16:25
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lomic2 Messages postés 14 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 21 septembre 2012
22 janv. 2007 à 16:57
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