Réinitialisation d'une liste déroulante après requete ajax
cs_lowkey
Messages postés260Date d'inscriptionjeudi 31 mai 2007StatutMembreDernière intervention 5 novembre 2010
-
29 oct. 2007 à 16:24
cs_lowkey
Messages postés260Date d'inscriptionjeudi 31 mai 2007StatutMembreDernière intervention 5 novembre 2010
-
30 oct. 2007 à 10:56
Bonjour,
Voici ce que je développe :
une question s'affiche, les réponses sont dans une liste déroulante.
Lorsque je sélectionne une réponse, la question suivante apparait(elle se trouve dans une bdd), mais la liste déroulante où se trouve la réponse 1 reprend son index d'origine.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 30 oct. 2007 à 09:07
Bonjour,
si j'ai compris : il doit "rester" un<option selected> dans responseText ?
peut-être ?
quoique, comme
document.getElementById('quest').innerHTML=
document.getElementById('quest').innerHTML+leselect
ça ajoute à ce qui existe... faut voir.
cs_lowkey
Messages postés260Date d'inscriptionjeudi 31 mai 2007StatutMembreDernière intervention 5 novembre 20101 30 oct. 2007 à 09:24
Salut bultez !!
Exactement, le code est cencé ajouter la question à la suite (ce qu'il fait), et l'option qui est 'selected' doit le rester.
Or, après l'ajout, ma liste déroulante se positionne sur mon premier 'option'.
Cela peut-il venir du faite que je lance ma requete sur le 'onclick' des 'option'? :
$list=mysql_query("SELECT * FROM reponse WHERE id_question=".$q1[0]);
$rep="<select><option value='0'></option>";
while ($l=mysql_fetch_row($list))
{
$rep.="<option value='".$l[0]."' onclick='go(".$l[3].", 1, ".$l[0].")'>".html_entity_decode(stripslashes($l[1]))."</option>";
}
$rep.='</select>';
cs_lowkey
Messages postés260Date d'inscriptionjeudi 31 mai 2007StatutMembreDernière intervention 5 novembre 20101 30 oct. 2007 à 10:09
Merci pour ta réponse aussi rapide.
Effectivement, sous IE, ça ne marche pas.
Je viens de modifier ma fonction go() :
function go(num,rang,rep){
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readyState 4 && xhr.status 200){
leselect = xhr.responseText;
// On se sert de innerHTML pour rajouter les options a la liste
if(document.getElementById('que'+(rang+1)))
{
document.getElementById('que'+(rang+1)).parentNode.innerHTML=leselect;
}else
{
document.getElementById('quest').innerHTML+=leselect;
}
Si je suis à la question 3 (par exemple), je change la réponse à la question 1, je fais changer la question 2, mais je ne la rajoute pas sinon j'aurais deux fois la question 2.
Dans ce cas là, la réponse (question 1) reste dans ma liste déroulante. Ca n'a donc pas l'air de venir de php.
Je suis vraiment perdu là...
Sinon, que me conseilles-tu à la place du 'onclick'? Je souhaite garder ma fonction go() dans l'element 'option'.
Merci
<hr />
lowkey
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lowkey
Messages postés260Date d'inscriptionjeudi 31 mai 2007StatutMembreDernière intervention 5 novembre 20101 30 oct. 2007 à 10:11
Oups, j'oubliais...
Je ne sais pas si c'est important, mais il vaut mieux le dire. l'élément ayant l'id 'quest' est un <table/>
et les éléments ayant les id 'que1', 'que2', ... sont les <tr/> de ce <table/>
cs_lowkey
Messages postés260Date d'inscriptionjeudi 31 mai 2007StatutMembreDernière intervention 5 novembre 20101 30 oct. 2007 à 10:56
Merci bultez.
Les selects ne sont pas liés entre eux.
J'ai trouvé ce qui me bloquait au niveau des index des select :
document.getElementById('quest').innerHTML+=leselect;
Ce bout de code n'ajoute pas seulement 'leselect', mais il réécrit tout l'element ayant l'id 'quest'.
J'ai donc essayé d'autres méthodes :
document.getElementById('quest').insertData(leselect);
et
var reste = document.createTextNode(leselect);
document.getElementById("quest").appendData(reste.nodeValue);
mais aucun ne marche...
Pour ce qui est de l'incompatibilité IE, je vais aller voir le lien que tu m'as donné.