Posez votre question Signaler

[Javascript]Objet attendu [Résolu]

lomic2 13Messages postés 22 janvier 2007Date d'inscription - Dernière réponse le 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
Lire la suite 

[Javascript]Objet attendu »

5 réponses
Réponse
+1
moins plus
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> 
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « [Javascript]Objet attendu » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook