Autocomplete

matiou34 Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   -  
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai ce code ci-dessous. Je souhaiterais que chaque pays renvoie vers une url spécifique de type url="/beta/world/index.php?pays=AFGHANISTAN"

Merci pour votre aide !



<body onload="document.getElementById('champ').focus()">
<form name="myForm" method="post" action="autocomplete.html">
<div onkeydown="return moveSelection()">
Tapez le nom d'un pays :<br />
<input type="text" autocomplete="off" name="myCombo" id="champ"
onkeyup="window.setTimeout('refreshList();', 10); return getEnterKey()" />
<div id="liste"></div>
</div>
<div></div>
</form>
<script type="text/javascript">
<!--
var selIndex = 0;
var nbMatch = 0;
var myArray = new Array();
var content = '';
var old = '';
myArray[0] = 'Acores';
myArray[1] = 'Afghanistan';
myArray[2] = 'Afrique du Sud';
myArray[3] = 'Albanie';
myArray[4] = 'Algerie';
myArray[5] = 'Allemagne';
myArray[6] = 'Angola';
myArray[7] = 'Arabie Saoudite';
myArray[8] = 'Autriche';
myArray[9] = 'Bahrain';
myArray[10] = 'Belgique';
myArray[11] = 'Benin';
myArray[12] = 'Botswana';
myArray[13] = 'Bulgarie';
myArray[14] = 'Burkina Faso';
myArray[15] = 'Burundi';
myArray[16] = 'Cameroun';
myArray[17] = 'Centr\'Afrique';
myArray[18] = 'Chypre';
myArray[19] = 'Comorres';
myArray[20] = 'Congo';
myArray[21] = 'Cote d\'Ivoire';
myArray[22] = 'Croatie';
myArray[23] = 'Danemark';
myArray[24] = 'Djibouti';
myArray[25] = 'Egypte';
myArray[26] = 'Emirats Arabes Unis';
myArray[27] = 'Erithree';
myArray[28] = 'Espagne';
myArray[29] = 'Estonie';
myArray[30] = 'Ethiopie';
myArray[31] = 'Finlande';
myArray[32] = 'France';
myArray[33] = 'Gabon';
myArray[34] = 'Ghana';
myArray[35] = 'Grece';
myArray[36] = 'Guadeloupe';
myArray[37] = 'Guinee';
myArray[38] = 'Guinee Equatoriale';
myArray[39] = 'Guinee-Bissau';
myArray[40] = 'Guyane';
myArray[41] = 'Guyanne Francaise';
myArray[42] = 'Hongrie';
myArray[43] = 'Ile Maurice';
myArray[44] = 'Iles Canaries';
myArray[45] = 'Iles du Cap Vert';
myArray[46] = 'Iran';
myArray[47] = 'Irlande';
myArray[48] = 'Islande';
myArray[49] = 'Israel';
myArray[50] = 'Italie';
myArray[51] = 'Jordanie';
myArray[52] = 'Kenya';
myArray[53] = 'Koweit';
myArray[54] = 'Lesotho';
myArray[55] = 'Lettonie';
myArray[56] = 'Liban';
myArray[57] = 'Liberia';
myArray[58] = 'Liechtenstein';
myArray[59] = 'Lituanie';
myArray[60] = 'Luxembourg';
myArray[61] = 'Madagascar';
myArray[62] = 'Madere';
myArray[63] = 'Malawi';
myArray[64] = 'Mali';
myArray[65] = 'Malte';
myArray[66] = 'Maroc';
myArray[67] = 'Martinique';
myArray[68] = 'Mauritanie';
myArray[69] = 'Monaco';
myArray[70] = 'Mozambique';
myArray[71] = 'Namibie';
myArray[72] = 'Niger';
myArray[73] = 'Nigeria';
myArray[74] = 'Norvege';
myArray[75] = 'Nouvelle Caledonie';
myArray[76] = 'Oman';
myArray[77] = 'Ouganda';
myArray[78] = 'Papouasie-Nouvelle Guinee';
myArray[79] = 'Pays-Bas';
myArray[80] = 'Pologne';
myArray[81] = 'Polynesie Francaise';
myArray[82] = 'Portugal';
myArray[83] = 'Qatar';
myArray[84] = 'Republique Populaire du Congo';
myArray[85] = 'Republique Tcheque';
myArray[86] = 'Reunion';
myArray[87] = 'Roumanie';
myArray[88] = 'Royaume Uni';
myArray[89] = 'Russie';
myArray[90] = 'Rwanda';
myArray[91] = 'Saint Marin';
myArray[92] = 'Saint Pierre et Miquelon';
myArray[93] = 'Senegal';
myArray[94] = 'Sierra Leone';
myArray[95] = 'Slovaquie';
myArray[96] = 'Slovenie';
myArray[97] = 'Somalie';
myArray[98] = 'Soudan';
myArray[99] = 'Suede';
myArray[100] = 'Suisse';
myArray[101] = 'Swaziland';
myArray[102] = 'Syrie';
myArray[103] = 'Tanzanie';
myArray[104] = 'Tchad';
myArray[105] = 'Togo';
myArray[106] = 'Tunisie';
myArray[107] = 'Turquie';
myArray[108] = 'Ukraine';
myArray[109] = 'Yemen';
myArray[110] = 'Yougoslavie';
myArray[111] = 'Zambie';
function fillInput(i)
{
document.getElementById('champ').value = myArray[i];
document.getElementById('liste').style.display= 'none';
document.getElementById('champ').focus();
}
function refreshList()
{
if(document.getElementById('champ').value != old)
{
old=document.getElementById('champ').value;
document.getElementById('liste').innerHTML = '';
if (document.getElementById('champ').value.length > 0)
{
nbMatch = 0;
content='';
for (var i=0; i < myArray.length; i++)
{
if (myArray[i].slice(0, document.getElementById('champ').value.length).toUpperCase() == document.getElementById('champ').value.toUpperCase())
{
nbMatch++;
content += '<div id="' + nbMatch + '" class="result" onclick="fillInput(' + i + ')">' + myArray[i] + '</div>';
}
}
if (nbMatch)
{
document.getElementById('liste').innerHTML = content;
document.getElementById('liste').style.height = (Math.min(5, nbMatch)) + 'em';
document.getElementById('liste').style.display = 'block';
selIndex=0;
}
else
document.getElementById('liste').style.display = 'none';
}
else
{
document.getElementById('liste').style.display = 'none';
}
}
}
function moveSelection()
{
if (event.keyCode == 40)
{
if (selIndex > 0 && selIndex < nbMatch)
{
document.getElementById(selIndex).style.backgroundColor = 'white';
document.getElementById(selIndex).style.color = 'black';
}
if (selIndex < nbMatch)
{
selIndex++;
document.getElementById(selIndex).style.backgroundColor = 'darkblue';
document.getElementById(selIndex).style.color = 'white';
document.getElementById(selIndex).focus();
}
return false;
}
else if (event.keyCode == 38)
{
if (selIndex > 1)
{
document.getElementById(selIndex).style.backgroundColor = 'white';
document.getElementById(selIndex).style.color = 'black';
}
if (selIndex > 1 && selIndex <= nbMatch)
{
selIndex--;
document.getElementById(selIndex).style.backgroundColor = 'darkblue';
document.getElementById(selIndex).style.color = 'white';
}
return false;
}
return getEnterKey();
}
function getEnterKey()
{
if (event.keyCode == 13)
{
if (selIndex > 0)
{
document.getElementById('champ').value = document.getElementById(selIndex).innerText;
document.getElementById('liste').style.display = 'none';
old=document.getElementById(selIndex).innerText
}
return false;
}
else
{
return true;
}
}
-->
</script>


2 réponses

coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Je pense que ça va s'avérer difficile à faire sans PHP. As-tu une raison spécifique pour n'utiliser que du Javascript ? Ou Est-ce simplement parce que tu n'es pas à l'aise avec PHP ?
0
matiou34 Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   4
 
Même du php m'irait mais je ne sais pas par ou commencer en faite. Je trouve des exemple sur internet mais ce que je cherche est plus simple.
0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Voici rapidement en php, pour faire ta liste et afficher les liens :

<?php
$pays = array(
    'pays1',
    'pays2',
    'pays3',
    ...
);

// On met la liste en ordre alphabétique, au cas où...
sort($liste);

foreach ($liste as $element) {
	print '<p><a href="?pays=' . strtoupper($element) . '">' . $element . '</a></p>':
}
?>


Quelques références :
www.w3schools.com/php/default.asp
www.w3schools.com/php/php_looping_for.asp


Tu peux garder et adapter ton Javascript pour tes KeyEvents et ce genre de chose.

Et voilà ! Une liste de liens qui transmettent ta variable dans l'URL ! Pour la récupérer, tu vas juste chercher la variable $_GET['pays'].
www.w3schools.com/php/php_get.asp

Dis-moi si quelque chose te donne de la difficulté... On va lui faire sa fête ! ;-)
0
matiou34 Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   4
 
c'est super sympa de ta part de m'aider. je te tiens au courant de l'avancement
0
matiou34 Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   4
 
J'ai une erreur à ce niveau :/
print '<p><a href="?pays=' . strtoupper($element) . '">' . $element . '</a></p>':
0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Ah my bad : à la fin, au lieu d'un deux-points, mets un point-virgule ! ;)
0
matiou34 Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   4
 
Super merci :)
J'ai une autre petite question. J'ai un formulaire de recherche en javascript. Comment puis-je afficher mes résultats dans une frame spécifique ?
0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Premièrement, je déconseille vivement les frames, pour de multiples raisons. Mais comme tu ne te spécialises pas en PHP je ne te renverrai pas vers du AJAX, ça risque de te décourager. Quoique je t'invite à te renseigner quand tu auras du temps et de la motivation ;-)

En attendant, allons-y pour les frames. Ça fait longtemps que j'ai pas touché à ça, donc je vais être un peu vague... Déjà, le lien suivant devrait te donner des indices :
www.w3schools.com/jsref/dom_obj_frame.asp

En fait, je pense que tu peux te référer à un objet frameObject.contentDocument de la même manière que si c'était un objet document sur ta page principale. De là tu peux accéder à son contenu de la même manière qu'avec document.
www.w3schools.com/jsref/prop_frame_contentdocument.asp

Si quelqu'un veut ajouter son grain de sel, ne vous gênez pas, comme je dis je ne suis pas tout à fait sûr de ce que je dis ! ;-)
0