je teste actuellement le fonctionnement d'une application développée sous php.
Dans une des pages de l'appli, j'ai trois liste déroulante côte-à-côte. sachant que :
1. la première est remplie automatiquement au chargement de la page avec des données en base (MySQL).
2. Chaque liste suivante est provisionnée en fonction de l'élément choisi dans la précédente.
3. Les provisionnements sont traités par des fonctions javascript/ajax (cf. code plus bas).
Le problème ?
Après un choix dans la première liste, il ne se passe rien, la deuxième liste déroulante reste vide. La variable correspondante (id de l'élément) est pourtant bien transmise à la fonction JS, je l'ai vérifié en faisant un alert(this.value). Après avoir cherché un peu, je me dis que ça doit provenir des fonctions Javascript/Ajax mais je n'arrive pas à voir où.
Quelqu'un a-t-il une idée du pourquoi ça ne marche pas ?
Merci.
P.S.
Le code des trois listes déroulantes
<select id="perimetre" onchange="majDivAjoutTache(this.value, 'sp');">
<option value="0">Choisissez...</option>
<?php
foreach($perimetreMgr->getPerimetres() as $p){
echo "<option value=\"" . $p->getId() . "\"";
if(isset($_GET['perimetre']) && $_GET['perimetre'] == $p->getId()) echo "selected";
echo ">" . $p->getNomPerimetre() . "</option>";
}
?>
</select>
<select id="ssPerimetre" onchange="majDivAjoutTache(this.value, 'a');">
<option value="0">Choisissez...</option>
<?php
if(isset($_GET['perimetre'])){
$perimetreMgr = PerimetreMgr::getInstance();
// Ajout des sous perimetres
//$ssPerimetres = $perimetreMgr->getSousPerimetres($perimetreMgr->getPerimetreById($_GET['perimetre']));
$ssPerimetres = $perimetreMgr->getSousPerimetres($_GET['perimetre']);
foreach($ssPerimetres as $sp){
echo "<option value=\"" . $sp->getId() . "\"";
if($_GET['ssPerimetre'] == $sp->getId())
echo " selected ";
echo ">" . $sp->getDescription() . "</option>";
}
}
?>
</select>
<?php
?>
< select ="d_activite" onchange="$('ajouterTache').disabled=false; $('bookmarkerActivite').disabled=false">
<option value="0">Choisissez...</option>
<?php
$activiteMgr = ActiviteMgr::getInstance();
if(isset($_GET['ssPerimetre'])){
// Ajout des activités
$activites = $activiteMgr->getActivitesBySsPerimetre($_GET['ssPerimetre']);
foreach($activites as $a){
if(!$a->estClose())
echo "<option value=\"" . $a->getId() . "\">" . $a->getDescription() . "</option>";
}
}
?>
</select>
<button id="ajouterTache" disabled onclick="ajouterTache()">Ajouter</button>
<button id="bookmarkerActivite" disabled= onclick="bookmarquerActivite(<?php echo $_SESSION['gu_user']->getId(); ?>)">Bookmark</button>
<?php
$_activites = array();
$_activites = $activiteMgr->getActivitesBookmarks($_SESSION['gu_user']->getId());
?>
<br /><br />
Mes bookmarks : <select id="d_activite_b" onchange="$('ajouterTacheBookmark').disabled=false;$('supprimerBookmark').disabled=false;">
<option value="0">Choisissez...</option>
<?php
for($i = 0; $i < count($_activites); $i++){
if($_activites[$i] != null){
echo "<option value=\"" . $_activites[$i]->getId() . "\">";
echo "<b>" . $_activites[$i]->getSousPerimetre()->getPerimetre()->getNomPerimetre() . "</b> - ";
echo " " . $_activites[$i]->getSousPerimetre()->getDescription(). " - ";
echo $_activites[$i]->getDescription();
echo "</option>";
}
}
?>
</select>
Codes des fonctions Javascript/Ajax
La première...
// Mets à jour le bloc de selection de l'activite dans l'ajout de taches
majDivAjoutTache = function(perimetre, t){
if(t == 'sp')
url = "modules/m_timesheet/m_ajout_tache.php?reload_box=1&perimetre=" + perimetre;
if(t == 'a')
url = "modules/m_timesheet/m_ajout_tache.php?reload_box=1&ssPerimetre=" + perimetre + "&perimetre=" + $('perimetre').value;
rechargerBlocSansMessage(url, 'aff_ajout_tache');
}
La deuxième...
// Recharge un bloc @param bloc en y insérant le contenu de la page @param url
rechargerBlocSansMessage = function(url, bloc){
$('chargement').show();
new Ajax.Request(url, {
onSuccess: function(transport) {
$(bloc).update(transport.responseText);
$('chargement').hide();
}
});
}