par
Cyrano » 02 oct. 2008, 21:08
C'est de la logique pure pourtant. Je te mets le code ci-dessous avec des commentaires, tu devrais facilement capter la manœuvre :
/**
* Fonction privée appelée depuis la fonction changeClub()
*
* @param {String} valeur Valeur de la liste d'où provient l'appel
* @param {String} btn identifiant du bouton à afficher
*/
function afficherBouton(valeur, btn)
{
var bouton = document.forms.chgclub.elements[btn];
if(valeur != -1)
{
bouton.style.display = 'inline';
}
else
{
bouton.style.display = 'none';
}
}
/**
* Fonction de mise à jour de la seconde liste.
*
* @param {Array} tab tableau des valeurs de division
* @param {String} IdDivision identifiant de la division
* @param {String} valeur Valeur de la liste d'où provient l'appel
* @param {String} btn identifiant du bouton à afficher
*/
function changeClub(tab,IdDivision, valeur, btn)
{
if(IdDivision != "vide")
{
/* On compte les clubs de cette division */
var nbc = tab[IdDivision][1].length;
var form_c = '<select name="club" id="club">';
for(var j = 0; j < nbc; j++)
{
form_c += ' <option value="'+ tab[IdDivision][1][j] +'">'+ tab[IdDivision][2][j] +'<\/option>';
}
form_c += '<\/select>';
/* Ici, on peut maintenant faire afficher le bouton */
afficherBouton(valeur, btn);
}
else
{
form_c = "";
}
document.getElementById("blocClubs").innerHTML = form_c;
}
Partant de là, remets l'appel de la fonction AJAX changeClub() et regarde l'ajout que j'ai fait dans cette fonction :
- d'abord deux paramètres de plus;
- ensuite l'appel de la fonction qui va afficher le bouton.
Mais on va simplifier avec une seule fonction qui va tout faire en une fois :
/**
* Fonction de mise à jour de la seconde liste.
*
* @param {Array} tab tableau des valeurs de division
* @param {String} IdDivision identifiant de la division
* @param {String} valeur Valeur de la liste d'où provient l'appel
* @param {String} btn identifiant du bouton à afficher
*/
function changeClub(tab,IdDivision, valeur, btn)
{
var bouton = document.forms.chgclub.elements[btn];
if(IdDivision != "vide")
{
/* On compte les clubs de cette division */
var nbc = tab[IdDivision][1].length;
var form_c = '<select name="club" id="club">';
for(var j = 0; j < nbc; j++)
{
form_c += ' <option value="'+ tab[IdDivision][1][j] +'">'+ tab[IdDivision][2][j] +'<\/option>';
}
form_c += '<\/select>';
/* Ici, on peut maintenant faire afficher le bouton */
bouton.style.display = 'inline';
}
else
{
form_c = "";
bouton.style.display = 'none';
}
document.getElementById("blocClubs").innerHTML = form_c;
}
Simple non ?

C'est de la logique pure pourtant. Je te mets le code ci-dessous avec des commentaires, tu devrais facilement capter la manœuvre :
[php]/**
* Fonction privée appelée depuis la fonction changeClub()
*
* @param {String} valeur Valeur de la liste d'où provient l'appel
* @param {String} btn identifiant du bouton à afficher
*/
function afficherBouton(valeur, btn)
{
var bouton = document.forms.chgclub.elements[btn];
if(valeur != -1)
{
bouton.style.display = 'inline';
}
else
{
bouton.style.display = 'none';
}
}
/**
* Fonction de mise à jour de la seconde liste.
*
* @param {Array} tab tableau des valeurs de division
* @param {String} IdDivision identifiant de la division
* @param {String} valeur Valeur de la liste d'où provient l'appel
* @param {String} btn identifiant du bouton à afficher
*/
function changeClub(tab,IdDivision, valeur, btn)
{
if(IdDivision != "vide")
{
/* On compte les clubs de cette division */
var nbc = tab[IdDivision][1].length;
var form_c = '<select name="club" id="club">';
for(var j = 0; j < nbc; j++)
{
form_c += ' <option value="'+ tab[IdDivision][1][j] +'">'+ tab[IdDivision][2][j] +'<\/option>';
}
form_c += '<\/select>';
/* Ici, on peut maintenant faire afficher le bouton */
afficherBouton(valeur, btn);
}
else
{
form_c = "";
}
document.getElementById("blocClubs").innerHTML = form_c;
}[/php]
Partant de là, remets l'appel de la fonction AJAX changeClub() et regarde l'ajout que j'ai fait dans cette fonction :
- d'abord deux paramètres de plus;
- ensuite l'appel de la fonction qui va afficher le bouton.
Mais on va simplifier avec une seule fonction qui va tout faire en une fois :
[php]/**
* Fonction de mise à jour de la seconde liste.
*
* @param {Array} tab tableau des valeurs de division
* @param {String} IdDivision identifiant de la division
* @param {String} valeur Valeur de la liste d'où provient l'appel
* @param {String} btn identifiant du bouton à afficher
*/
function changeClub(tab,IdDivision, valeur, btn)
{
var bouton = document.forms.chgclub.elements[btn];
if(IdDivision != "vide")
{
/* On compte les clubs de cette division */
var nbc = tab[IdDivision][1].length;
var form_c = '<select name="club" id="club">';
for(var j = 0; j < nbc; j++)
{
form_c += ' <option value="'+ tab[IdDivision][1][j] +'">'+ tab[IdDivision][2][j] +'<\/option>';
}
form_c += '<\/select>';
/* Ici, on peut maintenant faire afficher le bouton */
bouton.style.display = 'inline';
}
else
{
form_c = "";
bouton.style.display = 'none';
}
document.getElementById("blocClubs").innerHTML = form_c;
}[/php]
Simple non ? ;)