maleo83
Messages postés22Date d'inscriptionlundi 18 octobre 2004StatutMembreDernière intervention 4 juin 2007
-
4 juin 2007 à 08:11
geve2007
Messages postés5Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention31 janvier 2008
-
31 janv. 2008 à 14:49
Bonjour, une question toute bète (j'ai même honte de la poser) :
J'ai une combobox, dont je veux envoyer la valeur d'index du champ selectionné
à une fonction javascript. Voici mon code
geve2007
Messages postés5Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention31 janvier 2008 31 janv. 2008 à 12:54
Bonjour,
J'ai beaucoup cherché sur le site avant de poser la question, mais comme je débute en Javascript, j'ai probablement dû mal chercher... désolé...
Voici mon p'tit problème :
J'ai une liste de noms de départements dans une liste de formulaire. La valeur de chaque option de la liste c'est le numéro du département. Le texte affiché pour chaque département est le nom du département.
Dans un champ au dessus de cette liste, l'utilisateur indique son code postal.
Je voudrais pouvoir modifier dynamique le 'selected' de la liste des départements une fois que je connais le numéro de ce département, histoire que la liste soit déjà sélectionné sur le bon département une fois le code postal connu.
Je n'ai trouvé que la manière de modifier l'élément sélectionné de la liste par rapport à son numéro d'index, et non par rapport à la valeur de l'option.
Voici le malheureux bout de code que j'ai réussi à pondre. Je suis confondu de honte :
function ChoixDepartement()
{
var cp = document.getElementById('cp').value;
var num_depart = cp.substring(0,2);
num_depart = parseInt(num_depart);
//alert(num_depart);
document.form1.id_departements.options[num_depart].selected=true;
}
Bien sûr, j'ai mis un onchange=ChoixDepartement()" sur le champ qui déclenche la fonction. Dans l'exemple du dessus, j'arrive bien à récupérer la bonne valeur dans num_depart, mais comme il correspond pas à l'option...
Je vais m'acheter un bon bouquin sur Javascript, histoire de ne plus poser de questions aussi nulles, mais bon... si une bonne âme pouvait m'aiguiller, cela serait sympa.
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 31 janv. 2008 à 13:08
Salut,
Tu n'as pas avoir honte de ton code, il est sympa et en plus tout bleu...
ceci te conviendrait-il mieux ?
<html>
<head>
<title>
</title>
<script>
function ChoixDepartement(_obj)
{
var cp = _obj.value;
if ( cp != null){
var num_depart = cp.substring(0,2);
num_depart = parseInt(num_depart);
var myCombo = document.getElementById('myCombo');
if ( num_depart-1 < myCombo.options.length)
myCombo.options[num_depart-1].selected=true;
}
geve2007
Messages postés5Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention31 janvier 2008 31 janv. 2008 à 14:13
Un grand merci, Zobibol : ton code m'a enfin permis de trouver le problème.
J'ai testé ce que tu m'as envoyé (super sympa de m'avoir consacré du temps) et pourtant cela ne marchait pas tout le temps.
C'est le "tout le temps" qui m'a fait comprendre. Parce qu'un programme, hein, ça marche ou ça marche pas.
Figure-toi que nos braves dirigeants (qui ne se soucient guère du sort des pôvres programmeurs) on sucré tout bonnement le département n° 20. A la place, on a droit au 2A et au 2B pour la Corse. Faut toujours qu'ils se distinguent, ceux-là ;-)
Du coup, la recherche par indice se trompe au dessus de 19 (vu qu'on saute direct au 21...), puis de nouveau au dessus de 29 (dans un classement par numéro de département, le 2A arrive après le 29).
J'ai corrigé mon code en conséquence. Et pour ceux qui souhaitent récupérer la liste des départements (avant qu'Attali ne fasse tout pêter...), la voici, la voilà :
function ChoixDepartement(_obj)
{
var cp = _obj.value;
if ( cp != null)
{
var num_depart = cp.substring(0,2);
num_depart = parseInt(num_depart);
alert(num_depart);
var id_departements = document.getElementById('id_departements');
if ( num_depart-1 < id_departements.options.length)
{
if(num_depart>19 && num_depart<29) num_depart=num_depart-1;
if(num_depart>29) num_depart=num_depart+1;
id_departements.options[num_depart].selected=true;
}
}
}
<option value="">Faites un choix</option>
<option value="01">Ain</option>
<option value="02">Aisne</option>
<option value="03">Allier</option>
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 31 janv. 2008 à 14:25
Si je puis me permettre une nouvelle modification qui fera que terminé les problèmes de la corse (enfin, si je puis dire) et des dom-Tom:
function ChoixDepartement(_obj)
{
var cp = _obj.value;
if ( cp != null){
var num_depart = cp.substring(0,2);
var myCombo = document.getElementById('myCombo');
var l = myCombo.options.length;
// Parcours la liste des options
for (var i=0; i < l; i++){
// Si la valeur de l'option est identique au numéro du département alors on selectionne et s
if ( myCombo.options[i].value == num_depart){
myCombo.options[i].selected=true;
break;
}
}
}
}
ne serais-ce point plus propre ?
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 31 janv. 2008 à 14:35
Et je remets l'couvert ;o)
function ChoixDepartement(_obj)
{
var cp = _obj.value;
if ( cp != null){
var dep = cp.substring(0,2);
var dtdep =cp.substring(0,3);
var myCombo = document.getElementById('myCombo');
var l = myCombo.options.length;
for (var i=0; i < l; i++){
var val = myCombo.options[i].value; if ( valdep || val dtdep){
myCombo.options[i].selected=true;
break;
}
}
}
}
et voilà maitenant tu prends en compte tous les départements ( outre mer, corse...)