IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Apparition d'un select défectueuse


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Tiger-222
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 76
    Par défaut Apparition d'un select défectueuse
    Bonsoir,

    Voici la situation :
    Je suis en plein développement d'une application Web pour une entreprise.
    Tout est fini, je suis en train de finaliser en ajoutant quelques fonctions bien utiles. Du coup j'en arrive à mon problème.

    Dans un formulaire, le technicien qui le rempli doit renseigner un champ pour le code postal et un autre pour la ville. J'ai pensé renseigner automatiquement la ville suivant le code postal. Jusqu'ici ça va.

    Exemple :
    1. Le code postal est 57000, la ville sera Metz.
    2. Le code est 57650, il y a 2 communes différentes (Fontoy et Havange), donc le technicien aura à choisir dans un select la ville de son choix.
    3. Mais s'il y a plus de 2 communes, le select est bien créé, mais il y a un blocage, il n'apparaît pas à l'écran et les deux cas précédents ne sont plus pris en compte.

    Voici le code Javascript comprenant un peu de PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    function testVille(obj) {
    var cp = obj.cp.value;
    var ligne = "";
    var cible = document.getElementById("caseVille");
    if (cp.length = 5) { cible.innerHTML = "<input type='text' name='ville' id='ville' />"; }
    if (cp.length < 5) { cible.innerHTML = "<input type='hidden' name='ville' />"; }
    <?
    	require_once ("fonctions.php");
    	connect();
    	// nombre total d'entrées :
    	$total = mysql_query("SELECT * FROM `villes` ORDER BY code_postal ASC");
    	$debut = 0;
    	$un_seul = "?";
    	// nombre d'entrées - 1 :
    	$max = mysql_num_rows($total) - 1;
    	while ($debut <= $max) {
    		$resultat = mysql_result($total,$debut,'code_postal');
     
    		if ($debut != $max) {
    			$resultat_en_cours = mysql_result($total,($debut + 1),'code_postal');
    		}
    		else {
    			$resultat_en_cours = "";
    		}
     
    		// si le code entré est connu de la BDD et qu'il n'y a q'un seul résultat, on affiche la ville :
    		if (($resultat == $un_seul) && ($resultat == $resultat_en_cours)) {
    			echo "ligne += \"<option value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\">".mysql_result($total,$debut,'nom_ville')."</option>'; ";
    		}
     
    		// si le code entré est connu de la BDD et qu'il y a plusieurs résultats, on affiche les villes à l'aide d'un select :
    		if (($resultat != $un_seul) && ($resultat == $resultat_en_cours)) {
    			echo
    				"if (cp == ".$resultat.") { 
    					ligne += \"<select name='ville'>\";
    					ligne += \"<option value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\">".mysql_result($total,$debut,'nom_ville')."</option>\"; ";
    		}
     
    		// si le code entré est connu de la BDD et qu-il s'agit du dernier résultat, on affiche la ville et referme le select :
    		if (($resultat == $un_seul) && ($resultat != $resultat_en_cours)) {
    			echo
    				"ligne += \"<option value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\">".mysql_result($total,$debut,'nom_ville')."</option>\";
    				ligne += \"</select>\";
    				ligne += \"<br /> autre ? <input type='text' name='new_ville' id='new_ville' size='18' value='' />\";
    				cible.innerHTML = ligne; }";
    		}
     
    		// si le code entré n'est pas connu de la BDD, on propose d'entrer une ville :
    		if (($resultat != $un_seul) && ($resultat != $resultat_en_cours)) {
    			echo
    				"if (cp == ".$resultat.") {
    					cible.innerHTML = \"<input type='text' name='ville' id='ville' size='20' value=\\\"".mysql_result($total,$debut,'nom_ville')."\\\" />\";
    				}";
    		}
     
    		$un_seul = $resultat;
    		$resultat = $resultat_en_cours;
    		$debut++;
    	}
    	// on vide la variable $total :
    	mysql_free_result($total);
    ?>
    }
    Et le code HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="#" method="post">
    	<input type="text" name="cp" size="5" maxlength="5" OnKeyUp="testVille(this.form);">
    	<p id="caseVille"></p>
    	<input type="submit" value="Ok" />
    </form>
    Je ne comprends pas où serait l'erreur.

    Quelq'un aurait-il vu ce que je m'obstine à ne pas voir ?

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    peux tu nous montrer le code généré sur un exemple qui pose problème ??
    tu dois avoir une plant javascript quelque part

  3. #3
    Membre éclairé Avatar de Tiger-222
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 76
    Par défaut
    Voici le code généré qui ne pose pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function testVille(obj) {
    	var cp = obj.cp.value;
    	var ligne = "";
    	var cible = document.getElementById("caseVille");
    	if (cp.length = 5) { cible.innerHTML = "<input type='text' name='ville' id='ville' />"; }
    	if (cp.length < 5) { cible.innerHTML = "<input type='hidden' name='ville' />"; }
    	if (cp == 55250) {
    		cible.innerHTML = "<input type='text' name='ville' id='ville' size='20' value=\"Saint Maurince sous les Côtes\" />";
    	}
    	if (cp == 57000) {
    		cible.innerHTML = "<input type='text' name='ville' id='ville' size='20' value=\"Metz\" />";
    	}
    	if (cp == 57650) { 
    		ligne += "<select name='ville'>";
    		ligne += "<option value=\"Fontoy\">Fontoy</option>"; 
    		ligne += "<option value=\"Havange\">Havange</option>";
    		ligne += "</select>";
    		ligne += "<br /> autre ? <input type='text' name='new_ville' id='new_ville' size='18' value='' />";
    		cible.innerHTML = ligne; 
    	}
    }
    Dans ce cas là, il n'y a que deux communes pour 57650, donc tout fonctionne bien.

    Et le code qui pose quelques soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function testVille(obj) {
    	var cp = obj.cp.value;
    	var ligne = "";
    	var cible = document.getElementById("caseVille");
    	if (cp.length = 5) { cible.innerHTML = "<input type='text' name='ville' id='ville' />"; }
    	if (cp.length < 5) { cible.innerHTML = "<input type='hidden' name='ville' />"; }
    	if (cp == 55250) {
    		cible.innerHTML = "<input type='text' name='ville' id='ville' size='20' value=\"Saint Maurince sous les Côtes\" />";
    	}
    	if (cp == 57000) {
    		cible.innerHTML = "<input type='text' name='ville' id='ville' size='20' value=\"Metz\" />";
    	}
    	if (cp == 57650) { 
    		ligne += "<select name='ville'>";
    		ligne += "<option value=\"Test\">Test</option>"; 
    		ligne += "<option value=\"Fontoy\">Fontoy</option>'; 
    		ligne += "<option value=\"Havange\">Havange</option>";
    	ligne += "</select>";
    	ligne += "<br /> autre ? <input type='text' name='new_ville' id='new_ville' size='18' value='' />";
    	cible.innerHTML = ligne; 
    	}			
    }
    Après une bonne nuit, en revoyant le code, je viens de voir l'erreur!
    Il y a une simple quote au lieu d'une double en fin de ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne += "<option value=\"Fontoy\">Fontoy</option>';
    Merci !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. SELECT Distinct avec tri par ordre d'apparition
    Par Nono23 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2012, 15h16
  3. selection trié par quantité d'apparition
    Par nocoment dans le forum Débuter
    Réponses: 3
    Dernier message: 07/05/2008, 14h25
  4. Apparition d'1 champ selon valeur de select
    Par BnA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/07/2007, 10h54
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo