|
|
|
|
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
Bonjour,
<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> |
Ah par contre je vois que je ne peux pas réafficher l'ensemble des catégories.
|
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. |
Ok, je comprend, merci pour le tuyau n°2
|