Listes déroulantes liées
flogood
-
flogood -
flogood -
Bonjour,
Bonjour !
J'ai un petit problème avec Ajax, et comme je ne maitrise pas trés bien je viens vous demandez de l'aide !
C'est pour créer 2 listes déroulantes liées.
J'ai fait un alert de xhr.responseText, et le message suivant apparait :
<select nom="cont" id="cont"><option value ="1">Machin</option>
Mais le problème c'est que ma deuxième liste déroulante ne reçoit pas cette ligne.
Voila le code :
<!-- nouvetu.inc -->
<html>
<head>
<script type='text/javascript'>
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){ // Firefox et autres
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function change(){
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function() {
//alert(xhr.readyState);
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
//alert(xhr.readystate);
//alert(xhr.status);
if(xhr.readyState == 4 && xhr.status == 200){
di = document.getElementById('cont');
di.innerHTML = xhr.responseText;
alert(xhr.responseText);
}
}
// Ici on va voir comment faire du post
xhr.open("POST","includes/ajaxcont.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
identreprise = document.getElementById('entre').options[document.getElementById('entre').selectedIndex].value;
//alert(identreprise);
xhr.send("num_entr="+identreprise);
}
</script>
</head>
<body>
<center><font color = "navy" size = "5">Ajout d'un nouvel apprenti</font></center>
<form method="POST" action="index.php?lien=ajout">
<table>
[...]
<td>Entreprise :</td>
<td><select name='entre' id='entre' onchange='change()'>
<option value='-1'>Choisisez une entreprise</option>
<?
mysql_select_db("lyceecon0");
$res = mysql_query("SELECT num_entr,nom_entre FROM entreprise ORDER BY nom_entre");
while($row = mysql_fetch_assoc($res))
{
echo "<option value='".$row["num_entr"]."'>".$row["nom_entre"]."</option>";
}
?>
</select></td>
<td></td>
<td>Contact :</td>
<div id='cont' style='display:inline'>
<td><select name='cont' id = 'cont'>
<option value='-1'>Choisisez un Contact</option>
</select></td>
</div>
</tr>
</table>
et l'autre fichier
<!-- ajaxcont.php-->
<?php
mysql_connect("localhost","root","");
mysql_select_db("lyceecon0");
echo '<select name="cont" id = "cont">';
if(isset($_POST["num_entr"]))
{
$res = mysql_query("SELECT num_pers,nom_pers FROM personnel WHERE num_entr=".$_POST["num_entr"]." ORDER BY nom_pers");
while($row = mysql_fetch_assoc($res))
{
if ($row)
{
echo '<option value="'.$row["num_pers"].'">'.$row["nom_pers"].'</option>';
}
}
}
else
{
echo "<option value='-1'>Choisir un contact</option>";
echo "</select>";
}
?>
Merci d'avance !
Bonjour !
J'ai un petit problème avec Ajax, et comme je ne maitrise pas trés bien je viens vous demandez de l'aide !
C'est pour créer 2 listes déroulantes liées.
J'ai fait un alert de xhr.responseText, et le message suivant apparait :
<select nom="cont" id="cont"><option value ="1">Machin</option>
Mais le problème c'est que ma deuxième liste déroulante ne reçoit pas cette ligne.
Voila le code :
<!-- nouvetu.inc -->
<html>
<head>
<script type='text/javascript'>
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){ // Firefox et autres
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function change(){
var xhr = getXhr();
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function() {
//alert(xhr.readyState);
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
//alert(xhr.readystate);
//alert(xhr.status);
if(xhr.readyState == 4 && xhr.status == 200){
di = document.getElementById('cont');
di.innerHTML = xhr.responseText;
alert(xhr.responseText);
}
}
// Ici on va voir comment faire du post
xhr.open("POST","includes/ajaxcont.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
identreprise = document.getElementById('entre').options[document.getElementById('entre').selectedIndex].value;
//alert(identreprise);
xhr.send("num_entr="+identreprise);
}
</script>
</head>
<body>
<center><font color = "navy" size = "5">Ajout d'un nouvel apprenti</font></center>
<form method="POST" action="index.php?lien=ajout">
<table>
[...]
<td>Entreprise :</td>
<td><select name='entre' id='entre' onchange='change()'>
<option value='-1'>Choisisez une entreprise</option>
<?
mysql_select_db("lyceecon0");
$res = mysql_query("SELECT num_entr,nom_entre FROM entreprise ORDER BY nom_entre");
while($row = mysql_fetch_assoc($res))
{
echo "<option value='".$row["num_entr"]."'>".$row["nom_entre"]."</option>";
}
?>
</select></td>
<td></td>
<td>Contact :</td>
<div id='cont' style='display:inline'>
<td><select name='cont' id = 'cont'>
<option value='-1'>Choisisez un Contact</option>
</select></td>
</div>
</tr>
</table>
et l'autre fichier
<!-- ajaxcont.php-->
<?php
mysql_connect("localhost","root","");
mysql_select_db("lyceecon0");
echo '<select name="cont" id = "cont">';
if(isset($_POST["num_entr"]))
{
$res = mysql_query("SELECT num_pers,nom_pers FROM personnel WHERE num_entr=".$_POST["num_entr"]." ORDER BY nom_pers");
while($row = mysql_fetch_assoc($res))
{
if ($row)
{
echo '<option value="'.$row["num_pers"].'">'.$row["nom_pers"].'</option>';
}
}
}
else
{
echo "<option value='-1'>Choisir un contact</option>";
echo "</select>";
}
?>
Merci d'avance !
A voir également:
- Listes déroulantes liées
- Listes déroulantes excel - Guide
- Listes déroulantes en cascade excel - Guide
- Supprimer les listes déroulantes excel - Forum Excel
- Effacer liste déroulante - Forum Réseaux sociaux
- Supprimer liste déroulante Excel ✓ - Forum Excel
1 réponse
Bonjour,
dans la partie de la page où tu veux afficher ta deuxième liste tu ne dois pas mettre tout ça:
<td></td>
<td>Contact :</td>
<div id='cont' style='display:inline'>
<td><select name='cont' id = 'cont'>
<option value='-1'>Choisisez un Contact</option>
</select></td
parce que inner.HTML ne peux pas "écrire" dans le <Select mais seulement écrire toute la liste complète
<select .... >
<option> ....
</select>
donc en résumé:
dans ta page tu mets seulement:
Tu fais générer par ton script php appelé par Ajax toute ta liste avec les
Tu dis:
J'ai fait un alert de xhr.responseText, et le message suivant apparait :
<select nom="cont" id="cont"><option value ="1">Machin</option>
Donc ton script fait bien déja ça mais mets tu as id='cont' pour le div et pour la liste et la c'est pas bon, un id doit être unique.
Change celui de ta liste.
@lain
dans la partie de la page où tu veux afficher ta deuxième liste tu ne dois pas mettre tout ça:
<td></td>
<td>Contact :</td>
<div id='cont' style='display:inline'>
<td><select name='cont' id = 'cont'>
<option value='-1'>Choisisez un Contact</option>
</select></td
parce que inner.HTML ne peux pas "écrire" dans le <Select mais seulement écrire toute la liste complète
<select .... >
<option> ....
</select>
donc en résumé:
dans ta page tu mets seulement:
<td></td> <td>Contact :</td> <td><div id='cont' style='display:inline'></div>
Tu fais générer par ton script php appelé par Ajax toute ta liste avec les
<select name="...... <option>Choisissez</option> <option>.... </select>
Tu dis:
J'ai fait un alert de xhr.responseText, et le message suivant apparait :
<select nom="cont" id="cont"><option value ="1">Machin</option>
Donc ton script fait bien déja ça mais mets tu as id='cont' pour le div et pour la liste et la c'est pas bon, un id doit être unique.
Change celui de ta liste.
@lain
Maintenant ça marche !!
A la prochaine...