[Javascript]Objet attendu
Résolu
lomic2
Messages postés
14
Statut
Membre
-
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
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
-
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> -
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. -
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. -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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