Rechercher : dans
Par :

[Javascript]Objet attendu

Dernière réponse le 22 jan 2007 à 16:57:55 lomic2, le 22 jan 2007 à 15:35:16 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [Javascript]Objet attendu » dans :
Javascript - L'objet Date Voir Les particularités de l'objet Date L'objet Date permet de travailler avec toutes les variables qui concernent les dates et la gestion du temps. Il s'agit d'un objet inclus de façon native dans Javascript, et que l'on peut toujours utiliser. La...
Javascript - Manipulation des contrôles clavier VoirManipulation des contrôles clavier Cette astuce a pour but de vous faire découvrir la (ou du moins une) manière de contrôler les évènements clavier en javascript. Cela vous permettra de contrôler/attribuer les/des comportements particuliers à...
Javascript - Date de dernière modification de la page VoirIl est possible, en langage Javascript, d'afficher la date de dernière modification de la page Web grâce à la propriété lastModified de l'objet document :
Déplacement automatique d'un objet sur une diapositive VoirCette astuce permet le déplacement automatique d'un objet sur une diapositive. Exemple : Une voiture se déplace de Paris à Marseille sur une carte de France avec un détour par la Vendée Voilà comment procéder: 1. mettre l'image souhaitée en arrière...
Javascript - La notion d'objet VoirNotion d'objet Le but de cette section n'a pas pour ambition de traîter de la programmation orientée objet mais de donner une idée de ce qu'est un objet, concept nécessaire à la création de scripts Javascript. Le Javascript traite les éléments qui...
Javascript - L'objet String VoirLes particularités de l'objet String string est un mot anglais qui signifie "chaîne", il s'agit en fait de chaîne de caractères. L'objet String est un objet qui contient un certain nombre de propriétés et de méthodes permettant la manipulation...
Javascript - L'objet Math VoirLes particularités de l'objet Math L'objet Math est, comme vous l'imaginez, un objet qui a de nombreuses méthodes et propriétés permettant de manipuler des nombres et qui contient des fonctions mathématiques courantes. Quelque soit la méthode ou la...

1

Reivax962, le 22 jan 2007 à 15:43:23

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> 

Répondre à Reivax962

2

lomic2, le 22 jan 2007 à 15:52:03

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.

Répondre à lomic2

3

lomic2, le 22 jan 2007 à 16:13:41

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.

Répondre à lomic2

4

Reivax962, le 22 jan 2007 à 16:25:06

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.

Répondre à Reivax962

5

 lomic2, le 22 jan 2007 à 16:57:55

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

Répondre à lomic2
Collection CommentÇaMarche.net