Rechercher : dans
Par :

Balise select

Dernière réponse le 14 nov 2009 à 16:25:38 hichamdeb, le 11 nov 2009 à 19:33:30 
 Signaler ce message aux modérateurs

Bonjour,
comment mettre deux balises select l'une en fonction de l'autre comme sur le lien ci-dessous.
http://www.dhtmlgoodies.com/scripts/ajax-chained-select/ajax­-chained-select.html

MErci d'avance.

Configuration: Windows Vista
Safari 531.9.1

Meilleures réponses pour « balise select » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Les balises dans la partie 'head' VoirAvant tout : rappel sur le doctype La partie head Balises meta Mots clés Description Déclaration de la langue du site Catégorie Auteur Restrictions pour les moteurs de recherche Adresse de la page Logiciels utilisés pour la...
Les balises HTML VoirHTML, un langage à balises Le HTML n'est pas un langage de programmation. Il s'agit d'un langage permettant de décrire la mise en page et la forme d'un contenu rédigé en texte simple. Une page HTML est ainsi un simple fichier texte...
Les balises de style VoirQu'est-ce qu'une balise de style? Les balises de style modifient la typographie du texte. Elles peuvent être imbriquées dans d'autres balises de style de la même façon qu'on le ferait avec un traitement de texte. Voici une liste de balises de...

1

monkey_monk, le 11 nov 2009 à 20:53:34

Tu remarques que tu as la réponse dans ta question ? [Monkey Monk]
That's all folks !

Répondre à monkey_monk

2

hichamdeb, le 12 nov 2009 à 12:04:53

Heu !! je voie pas la réponse !

Répondre à hichamdeb

3

Meelas, le 12 nov 2009 à 12:15:09

Salut,

Il faut utiliser AJAX pour faire ce que tu veux réaliser.
D'où la réponse dans la question : "ajax-chained-select". ^^

Répondre à Meelas

4

hichamdeb, le 12 nov 2009 à 12:24:43

-_-" je sais qu'il faut utiliser ajax, mais je travail très peux avec. Est ce que vous avez un code source?

Répondre à hichamdeb

5

Meelas, le 12 nov 2009 à 14:29:15
  • +1

Voila un script simple. Il y a deux pages, La page principale et celle appelée par la fonction AJAX.

Page 1 :

<head>
<title> Nom de la page</title>
<script type="text/javascript">

function getXhr() {
  if(window.XMLHttpRequest) xhr = new XMLHttpRequest();
  else if(window.ActiveXObject)
   {
    try
     {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
     }
    catch (e)
     {
      xhr = new ActiveXObject("Microsoft.XMLHTTP");
     }
   }
  else
   {
    alert("Le navigateur ne supporte pas les objets XMLHTTPRequest, il faut le mettre à jour");
    xhr = false;
   }
}


function aj_search (clef) {
	getXhr();
		
	xhr.onreadystatechange = function() {
		if(xhr.readyState == 4 && xhr.status == 200) {
			document.getElementById("Option2").innerHTML = xhr.responseText;
		}
	}
	var data = 'opt1='+clef
	
	xhr.open("POST",'page_option2.php',true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-1');
	xhr.send(data);
}
</script>
</head>

<body>
	<label for="dom">Champ1</label>
		&nbsp;
		<select name="Champ1" id="Champ1" onchange="aj_search (this.value);" >
			<option value="opt1a">opt1a</option>
			<option value="opt1b">opt1b</option>
			<option value="opt1c">opt1c</option>
		</select>
		
<div id="Option2">
	<script type="text/javascript">
	aj_search("opt1a");
	</script>
</div>
</body>



Et la page appelée (page 2):


<label for="Option2">Option2</label>
	<select name="Champ2" id="Champ2">
<?php
	if(isset($_POST['opt1'])){
		$opt1 = $_POST['opt1'];
	}
	
	if($opt1 == 'opt1a'){
		echo "
			<option value='opt2a'>opt2a</option>
			<option value='opt2b'>opt2b</option>
			<option value='opt2c'>opt2c</option>
		";
	}
	elseif($opt1 == 'opt1b'){
		echo "
			<option value='opt2d'>opt2d</option>
			<option value='opt2e'>opt2e</option>
			<option value='opt2f'>opt2f</option>
		";
	}
	elseif($opt1 == 'opt1c'){
		echo "
			<option value='opt2g'>opt2g</option>
			<option value='opt2h'>opt2h</option>
			<option value='opt2i'>opt2i</option>
		";
	}
?>
</select>



Bon après tes listes tu les génères comme tu veux (à partir d'un tableau, d'une base de données...).

Répondre à Meelas

6

hichamdeb, le 12 nov 2009 à 16:55:08

Apparemment c'est la bonne solution, mais je ne voie pas comment sa fonctionne, j'ai crée deux pages comme tu m'a dis, mais il me sort qu'un seul champ !

Répondre à hichamdeb

7

Meelas, le 12 nov 2009 à 17:49:19

Fais voir ton code que j'essaie de voir ou est l'erreur.

A priori je vois 2 possibilités. Soit la page 2 comporte une erreur et ne s'affiche donc pas, soit dans la page 1 le code suivant (que tu as adapté) ne se trouve pas entre les balises <body> et </body>.

<script type="text/javascript">
	aj_search("opt1a");
	</script>


Dans le 2nd cas changer la valeur du premier select devrait afficher le code de la seconde page, si ce n'est pas le cas, il doit y avoir une erreur dans la page 2.

Mais montre ton code ça sera plus simple. ;)

Répondre à Meelas

8

hichamdeb, le 12 nov 2009 à 18:33:25

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Nom de la page</title>
<script type="text/javascript">

function getXhr() {
  if(window.XMLHttpRequest) xhr = new XMLHttpRequest();
  else if(window.ActiveXObject)
   {
    try
     {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
     }
    catch (e)
     {
      xhr = new ActiveXObject("Microsoft.XMLHTTP");
     }
   }
  else
   {
    alert("Le navigateur ne supporte pas les objets XMLHTTPRequest, il faut le mettre à jour");
    xhr = false;
   }
}


function aj_search (clef) {
	getXhr();
		
	xhr.onreadystatechange = function() {
		if(xhr.readyState == 4 && xhr.status == 200) {
			document.getElementById("Option2").innerHTML = xhr.responseText;
		}
	}
	var data = 'opt1='+clef
	
	xhr.open("POST",'page_option2.php',true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-1');
	xhr.send(data);
}
</script>
</head>

<body>
	<label for="dom">Champ1</label>
		&nbsp;
		<select name="Champ1" id="Champ1" onchange="aj_search (this.value);" >
			<option value="opt1a">opt1a</option>
			<option value="opt1b">opt1b</option>
			<option value="opt1c">opt1c</option>
		</select>
		
<div id="Option2">
	<script type="text/javascript">
	aj_search("opt1a");
	</script>
</div>


<label for="Option2">Option2</label>
	<select name="Champ2" id="Champ2">
<?php
	if(isset($_POST['opt1'])){
		$opt1 = $_POST['opt1'];
	}
	
	if($opt1 == 'opt1a'){
		echo "
			<option value='opt2a'>opt2a</option>
			<option value='opt2b'>opt2b</option>
			<option value='opt2c'>opt2c</option>
		";
	}
	elseif($opt1 == 'opt1b'){
		echo "
			<option value='opt2d'>opt2d</option>
			<option value='opt2e'>opt2e</option>
			<option value='opt2f'>opt2f</option>
		";
	}
	elseif($opt1 == 'opt1c'){
		echo "
			<option value='opt2g'>opt2g</option>
			<option value='opt2h'>opt2h</option>
			<option value='opt2i'>opt2i</option>
		";
	}
?>
</select>



</body>
</html>



PS : j'ai essayé de faire deux page differente, mais sa marche pas !

Répondre à hichamdeb

9

avion-f16, le 12 nov 2009 à 19:26:53

AJAX n'est a utilisé que si les données renvoyées sont différentes (base de données, ...). Si en fonction du choix c'est toujours la même chose qui s'affiche (par ex. pour "Europe" : France, Belgique et Suisse) alors autant écrire les listes puis les masquer. Ensuite, lors du onchange sur une liste, on affiche la liste suivante qui correspond. Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

10

Meelas, le 13 nov 2009 à 10:27:45

Si tu mets tout dans la même page, ça ne marchera pas, la fonction search affiche dans le div "Option2" la page "page_option2.php".

Après ce n'était qu'un exemple avion-f16, j'avais bien dit :
Bon après tes listes tu les génères comme tu veux (à partir d'un tableau, d'une base de données...).

Je montre comment on peut l'utiliser, après je sais pas ce qu'on va en faire. ^^

Répondre à Meelas

11

avion-f16, le 13 nov 2009 à 18:00:26

Pourquoi ça ne fonctionnerait pas ?
Ma solution n'a pas besoin d'AJAX.
En plus, il n'y a aucun intérêt à l'utiliser si le résultat retourné est toujours le même en fonctionne de la valeur de la première liste.
Voilà un exemple. Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

12

Meelas, le 13 nov 2009 à 18:14:08

J'ai pas dit que ta proposition ne marcherait pas, en fait si il n'y a rien à prendre dans une base de données, c'est plus accessible et ça reviens au même. Tu as du mal me comprendre.Enfin c'est pas grave...

Je disais que ce qu'avait mis hichamdeb ne pouvait pas fonctionner. Vu que le code AJAX que j'ai donné fait appel à une seconde page. Si tout est sur la même page ce n'est pas fonctionnel...

Répondre à Meelas

13

avion-f16, le 13 nov 2009 à 18:19:09

Ah ok, je croyais que tu t'adressais à moi ...
Je remets ça sur le dos de la fatigue, heureusement que le week-end est là. Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

14

Meelas, le 13 nov 2009 à 18:30:19

Ouai, tellement pratique cette fatigue des fois. :p

Week-end =)

Répondre à Meelas

15

hichamdeb, le 14 nov 2009 à 10:13:42

Merci infiniment Meelas, en fait le pb c'est que j'au mis le code (2) entre des balises body.
tu m'a sauvé la vie =)

Répondre à hichamdeb

16

 Meelas, le 14 nov 2009 à 16:25:38

Parfait, si ça marche tant mieux. ^^

Répondre à Meelas