11499 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je souhaiterai pouvoir jouer dynamiquement sur mes select. Smiley smile

J'ai une liste de pays, et une liste de Business Partner, quand je clique sur un pays exemple la France, je voudrais qu'il y ait dans le select des BP la liste des BP de la France et seulement de la France. Smiley ravi

Pour cela j'ai pensé à faire quelque chose comme ceci: Smiley cligne

HTML

<!-- Select pour le pays qu'on souhaite -->

<div id="div_country" style="display:none;">
<p>
<select id="select_country" onChange="ChangeBPselect(this.value);">
	<?php
		$rows = file("datas/Country.txt", FILE_SKIP_EMPTY_LINES);
		foreach($rows as $value){
	?>
			<option value="<?php echo $value; ?>"><?php echo $value; ?></option>
	<?php
		}
	?>
</select>
</p>
<br/>                          
</div>



<!-- Select pour le choix entre les BP -->	
<FONT color="royalblue">Business Partner(multiple choices)</FONT>
<p>
<form name="ListeBP">
<select multiple id="select_BPname" name="select_BPname" size="8">
	<option selected value= "all">all</option>
	<?php
		$rows = file("datas/BPname.txt", FILE_SKIP_EMPTY_LINES);
		foreach($rows as $value){
	?>
			<option value="<?php echo $value; ?>"><?php echo $value; ?></option>
	<?php
		}
	?>
</select>
</form>		
</p><br/>			


JAVASCRIPT

function verif(){
if (document.layers){
	formulaire = document.forms.ListeBP;
}
else{
	formulaire = document.ListeBP;
}
}

function ChangeBPselect(code){
verif();

url = "Country=" & code;
ajax_call (url, function(json){
	var tab_BP[] = json['tabBP'];
});

formulaire.select_BPname.options.length = tab_BP.length;
for (i=0; i<tab_BP.length; i++){
	formulaire.select_BPname.options[i].value = tab_BP[i];
	formulaire.select_BPname.options[i].text = tab_BP[i];
}
document.ListeBP.select_BPname.options.selectedIndex = 0;
}



function ajax_call(what2do, callback){
$.ajax({	
	type: "GET",
	async: false,
	dataType: "json",
	url: "data.php?" + what2do,
	success: function(json) {
		callback(json);
	}
});
};



PHP

function GetListeBP ($country){
$req_array = mysql_query('SELECT Country, BP_name FROM `actis_table`');
$tableau = array();
while ($champs = mysql_fetch_array($req_array)) {
if (strtolower($country) == strtolower($champs["Country"]))	{
	$tableau[] = $champs["BP_name"];
}
}
return $tableau;
}

if (isset($_GET["country"])){
$country = $_GET["country"];
$resultat['tabBP'] = GetListeBP ($country);
}




mais evidemment ca ne marche pas Smiley bawling

Donc voila je viens vers vous en espérant que vous pourrez m'aider Smiley biggrin je suis plutot débutant et surtout niveau Ajax j'ai du mal à comprendre Smiley decu


Geoffrey

[/i][/i][/i][/i]
J'ai oublié de dire que de base la liste des Business Partner est donc rempli avec TOUS les business partner car mon select pour les pays est par defaut égale à WORLD

Smiley biggrin


Geoffrey
déjà faut voir s'il est vraiment nécessaire de mettre en place un tel mécanisme, est-ce que le nombre de BP est trop grand pour tout intégrer dans le html ? (ce qui n'empeche pas de faire un menu déroulant dynamique avec les BP du pays sélectionné)

ensuite je n'ai pas regardé ton code en détail mais je voie de suite quelques erreurs, attention aux majuscules, des fois tu utilises Country et des fois country. Enfin le code php retourne un tableau certes mais il faut le transformer en json par exemple avec json_encode.
Modifié par Zebrou (18 Jul 2013 - 13:32)
Merci de ta réponse !

Comme j'ai dit le select des Business Partner est de base rempli avec les valeurs par defaut ... Et oui je peux pas m amuser a les mettre en dur .... y en a trop il faut que ca soit dynamique, que quand je choisi France ca n affiche que les BP de la france et etc pour les 100 autres pays ....

Pour l'encodage j'ai en effet ceci:


$resultat = array();


print json_encode($resultat);



Pour "Country" c'est vrai je l'ai changé en "country" dans le javascript ^^


Des idées pour comment faire du coup ? Smiley cligne
Bon bah j'ai réussi finalement ! :O

Rien d'extraordinaire en fait ^^

Je vois souvent les gens qui disent qu'ils ont résolu leur probleme mais qui disent pas comment donc voila je vais tous vous mettre en espérant que ca pourra aider quelqu'un



HTML

<!-- Select pour le pays qu'on souhaite -->

<div id="div_country" style="display:none;">
<p>
<select id="select_country" onChange="ChangeBPselect(this.value);">                    
	<?php
		$rows = file("datas/Country.txt", FILE_SKIP_EMPTY_LINES);
		foreach($rows as $value){
	?>
			<option value="<?php echo $value; ?>"><?php echo $value; ?></option>
	<?php
		}       
	?>
</select>
</p>
<br/>
</div>			




<!-- Select pour le choix entre les BP -->	
<FONT color="royalblue">Business Partner(multiple choices)</FONT>
<p>
<form name="ListeBP">
<select multiple id="select_BPname" name="select_BPname" size="8">
	<option selected value= "all">all</option>
	<?php
		$rows = file("datas/BPname.txt", FILE_SKIP_EMPTY_LINES);
		foreach($rows as $value){
	?>
			<option value="<?php echo $value; ?>"><?php echo $value; ?></option>
	<?php
		}
	?>
</select>
</form>	
</p><br/>


JAVASCRIPT

function verif(){
if (document.layers){
	formulaire = document.forms.ListeBP;
}
else{
	formulaire = document.ListeBP;
}
}

var tab_BP="";

function ChangeBPselect(code){
verif();

url = "country=" + code;
ajax_call2(url, function(json){
	tab_BP = json['tabBP'];
});		

formulaire.select_BPname.options.length = tab_BP.length;
for (i=0; i<tab_BP.length; i++){
	formulaire.select_BPname.options[i].value = tab_BP[i];
	formulaire.select_BPname.options[i].text = tab_BP[i];
}
formulaire.select_BPname.options.selectedIndex = 0;
}

function ajax_call2(what2do, callback){
$.ajax({	
	type: "GET",
	async: false,
	dataType: "json",
	url: "data.php?" + what2do,
	success: function(json) {
		callback(json);
	}
});		
};


PHP


$resultat = array();

function GetListeBP ($country){
$req_array = mysql_query('SELECT Country, BP_name FROM `actis_table` ORDER BY `BP_name` ASC');
$tableau = array();
$premier=0;
$temp="";
while ($champs = mysql_fetch_array($req_array)) {
if (strtolower($country) == strtolower($champs["Country"]))	{
	if ($champs["BP_name"] !="" and $champs["BP_name"] !=null){
		if ($temp==""){
			$tableau[] = $champs["BP_name"];
			$temp = $champs["BP_name"];
		}
		Else {
			if ($temp != $champs["BP_name"]) {
				$tableau[] = $champs["BP_name"];
				$temp = $champs["BP_name"];
			}
		}
	}
}
}
$tableau = array_unique($tableau);
return $tableau;
}

if (isset($_GET["country"])){
$country = $_GET["country"];
$resultat['tabBP'] = GetListeBP ($country);		
}

print json_encode($resultat);




VOILA ! ^^ Smiley biggrin

hésitez pas a me poser des questions ou faire des remarques pour améliorer ?

a+


Geoffrey[/i][/i][/i][/i]
Modifié par InfoGeo (18 Jul 2013 - 17:06)