rafraichir le contenu des select
Salut,
j'ai deux listes de select : liste1 et liste2. liste1 est composé de plusieurs select: s01,s02,s03,s04 et liste2 est aussi composée de plusieurs select : s11,s12,s13,s14.
Les valeurs de select s11 dépend de la valeur choisie de s01 (à l'aide de l'attribut onchange)
de même pour s12 et s02, pour s13 et s03 et pour s14 et s04. Les select de la lite1 possèdent la même liste de valeurs.
jusqu'au là tout va bien. Le problème apparait dans l'étape suivante. J'ai mis à coté de chaque select de la liste1 un checkbox; si on séléctionne ce chekbox le choix de la select courante sera appliqué pour toutes les select qui suivent et par conséquent les valeurs des select de la liste2 changent suivant la valeur choisie, mon problème est : juste la première et la dernière select de la liste2 changent de valeurs.
un exemple :
supposons que les select s01,s02,s03 et s04 contiennent une liste d'entreprises(E1,E2,E3) et les select s11,s12,s13 et s14 contiennent la liste des employés de l'entreprise correspondent ; si je choisis E3 pour s01 et je clique sur le checkbox devant s01 donc E3 sera sélectionné pour s02,s03 et s04 et par conséquence les employés de E3 apparaissent dans s11,s12,s13 et s14 alors que pour le moment ils apparaissent juste dans s11 et s14
voila la fonction que j'appelle lors du clic sur le checkbox
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| function appliquerChoix(obj){
//alert("hi");
if(obj.checked==true){
var ok = confirm("Appliquer ce choix pour toutes les lignes suivantes?");
if(ok){
var index = obj.id.lastIndexOf(";");
var selectedline = obj.id.substring(index+1);
var nom = obj.id.substring(0,index);
var nbrline = document.getElementById("nbr").value;
var selectedoption = document.getElementById(nom+selectedline).selectedIndex;
//alert(nbrline);
//selectedline=selectedline+1;
var currentline = parseInt(selectedline)+1;
for(var i=currentline;i<nbrline;i++){
//alert(nom+";"+i);
var myselect=document.getElementById(nom+i);
myselect.selectedIndex= selectedoption;//.options[selectedoption].selected=true;
document.getElementById(nom+";"+i).checked=true;
myselect.onchange();
}
}
}
} |
dwr : plusieurs appels usccessif à une fonction
Salut,
j'ai localisé le bug du javascript. J'utilise l'api DWR(Direct Web Remoting) pour le rafraichissement des select et voilà les fonctions que j'utilise:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| function getEmployees(indice){
indicep = indice;
// alert("indicep="+indicep);
var selectedent = dwr.util.getValue("idEnt"+indice);
DWRtool.getEmployeesByEnt(selectedent,displayEmployees);
}
function displayEmployees(data) {
// alert("idEmp"+indicep);
dwr.util.removeAllOptions("idEmp"+indicep);
dwr.util.addOptions("idEmp"+indicep,[' ']);
dwr.util.addOptions("idEmp"+indicep, data,'idEmp','nom');
} |
le onchange() des select de la liste1 fait appel à getEmployees(indice).
la variable "indicep" fait différencier entres les select de la liste2.
Dans notre exemple, on a 4 select pour la liste1 et la liste2 donc si onclique sur le checkbox de la première select s01 la fonction getEmployees(indice) va être appelée 4 fois , de même pour la fonction displayEmployees(data); donc on appelle getEmployees(indice) puis displayEmployees(data) 4 fois, cependant les fonctions displayEmployees(data) sont appelées après avoir appelées toutes les fonctions getEmployees(indice) et comme ça la varaible indicep va prendre l'indice de la dernière select et c'est pour celà j'ai juste la première select et la dernière de la liste2 qui se rafraichissement.
j'espère que c'est clair.