Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2010, 12h32   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 20
Points : 3
Points : 3
Par défaut Javascript et input

Bonjour a tous,

Voila j'ai un petit probleme avec ma fonction javascript...

Alors j'ai une fonction qui verifie si une date de naissance saisie est correct. pour l'instant tout va bien elle fonctionne.
Seulement, je rajoute une condition a la fin pour que la fonction remplisse automatique un input apres avoir verifié la date mais rien ne se passe, voici un bout de mon code:

javascript
Code :
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
 
if (res == true)
    {
    document.forms["result_rpfa"].getElementByName[element].value = jour + "/" + mois + "/" + annee;
    if (mois <= 6) 	// date de naissance au 31/12 le plus proche est le 31/12 de l'année précédente.
    	{
    	document.getElementById(ageenfant).value = anneesin - (annee + 1) ;
    	}
    else		// date de naissance au 31/12 le plus proche est le 31/12 de l'année en cours.
    	{
            document.getElementById(ageenfant).value = anneesin - annee;
    	}
    			//prendre indice ("date" + i) afin de remplir la case age correspondante ("age" + i)
    if (document.getElementById(ageenfant).value < 0)
    	{
    	document.getElementById(ageenfant).value = 0;
    	}
 
    }
  else
    {
    alert("La date de naissance entrée n'est pas valide(elle doit etre de la forme jj/mm/aaaa ou un jour/mois n'est peut-être pas correct)");
    document.forms["result_rpfa"].elements[element].focus();
    }
  }
//return res;
}
res correspond à si res est true alors la date est bonne.

et dans une balise php, dans le formulaire:
Code :
1
2
3
4
5
6
7
8
9
10
 
<td >
        <div >
          <input type='text' name='date".$nbexit."' size='12' maxlength='10' onblur=\" javascript:verifDate('date".$nbexit."')\">
        </div>
      </td>
      <td >
        <div >
          <input type='text' name='age".$nbexit."' id ='ageenfant' size='4' maxlength='3' value=''>
        </div>
Merci d'avance
kratos60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 12h42   #2
Expert Confirmé Sénior
 
Avatar de Auteur
 
Inscription : avril 2004
Messages : 4 789
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 4 789
Points : 5 112
Points : 5 112
bonjour,


- supprime le terme "javascript" dans ton code HTML. Après un événement c'est toujours du javascript
Code :
onblur=\" javascript:verifDate('date".$nbexit."')\"
-
Code javascript :
 document.forms["result_rpfa"].getElementByName[element].value = jour + "/" + mois + "/" + annee;
Dans le reste de ton code js tu utilises la fonction getElementById(), pourquoi ne pas l'utiliser ici avec ce composant ?
Il est probable que ton souci vienne de là
Auteur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 13h08   #3
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Je dirais même plus :
1)
Code :
document.forms["result_rpfa"].getElementsByName[element].value = jour + "/" + mois + "/" + annee;
... il manque un "s"

2) getElementsByName n'est pas un objet ni un tableau... donc les crochets qui suivent... kézako ?

A la limite, on aurait plutôt attendu
Code :
document.forms["result_rpfa"].getElementsByName(element)[0].value = jour + "/" + mois + "/" + annee;
... c'est-à-dire que la partie en rouge correspond à :
Citation:
le premier élément du tableau (qu'on suppose être à un seul élément si le "name" de ton input est unique dans le formulaire) que renvoie la fonction getElementsByName appliquée au formulaire en question
à la condition bien sûr que la variable "element" contienne bien une chaine correspondant au "name" de l'input ^^

Mais le conseil d'Auteur est tout-à-fait judicieux : utilise donc un getElementById et oublie tout ce jeu de piste
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 13h56   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 20
Points : 3
Points : 3
Tout d'abord merci de vous pencher sur mon probleme

Oops... J'ai fait un mauvais copier coller :s. J'ai copier un broullion ^^.
Enfaite avec getelementsbyname () ou getelementsbyid () plus rien ne marche, il faut que je face ça :

Code :
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
 
if (res)
    {
    document.forms["result_rpfa"].elements[element].value = jour + "/" + mois + "/" + annee;
    if (mois <= 6) 	// date de naissance au 31/12 le plus proche est le 31/12 de l'année précédente.
    	{
    	document.getElementsById(ageenfant).value = anneesin - (annee + 1) ;
    	}
    else		// date de naissance au 31/12 le plus proche est le 31/12 de l'année en cours.
    	{
            document.getElementsById(ageenfant).value = anneesin - annee;
    	}
    			//prendre indice ("date" + i) afin de remplir la case age correspondante ("age" + i)
    if (document.getElementsById(ageenfant).value < 0)
    	{
    	document.getElementsById(ageenfant).value = 0;
    	}
 
    }
  else
    {
    alert("La date de naissance entrée n'est pas valide(elle doit etre de la forme jj/mm/aaaa ou un jour/mois n'est peut-être pas correct)");
    document.forms["result_rpfa"].elements[element].focus();
    }
  }
//return res;
}
Avec ce code, on arrive au meme resultat que dit si dessus c'est a dire ;
La verification de la date marche et il rajoute automatiquement les / donc cela veut dire qu'il rentre dans le If mais ne fait pas la suite...

J'ai enlevé le javascript : comme auteur me la conseillé mais je suis toujours dans la meme galere...
kratos60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 14h13   #5
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 802
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 802
Points : 35 807
Points : 35 807
Code :
document.getElementsById(ageenfant).value


Citation:
Code :
document.forms["result_rpfa"].getElementsByName(element)[0].value
on te parle de getElementsByName au lieu de getElementByName ! Pourquoi changer getElementById ?
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 14h32   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 20
Points : 3
Points : 3
...
sans commentaire

Bref, j'ai enlevé tout les "s" et cela ne marche toujours pas.
J'ai essayé de mettre par Id mais ça ne marche pas.
Pourtant comme "element" ce cf au name de l'input date, j'ai mit le meme id que le name et cela ne marche pas...A croire qu'il prefere

Code :
document.forms["result_rpfa"].elements[element].value
à

Code :
document.forms["result_rpfa"].getElementsByName(element)[0].value
ou

Code :
document.forms["result_rpfa"].getElementById(element).value
kratos60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 14h34   #7
Expert Confirmé Sénior
 
Avatar de Auteur
 
Inscription : avril 2004
Messages : 4 789
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 4 789
Points : 5 112
Points : 5 112
Citation:
Envoyé par RomainVALERI Voir le message

2) getElementsByName n'est pas un objet ni un tableau... donc les crochets qui suivent... kézako ?
getElementsByName est une fonction qui retourne bien un tableau car plusieurs objets peuvent avoir le même name.


@kratos60 : ne confonds surtout pas getElementById (sans "s" ) et getElementsByName (avec un s).
La valeur donnée à l'attribut id doit être unique dans ta page ! Par contre, plusieurs objets peuvent avoir le même name.
Et c'est là que ça se corse : IE ne fait pas toujours la distinction entre id et name (IE 6 et 7 c'est sûr, IE 8 je ne sais pas je n'ai pas testé )

[edit]
On peut voir le code HTML de ton formulaire ?
[/edit]
Auteur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h05   #8
Invité de passage
 
Inscription : novembre 2010
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 20
Points : 3
Points : 3
Enfaite je crois savoir d'ou viens mon erreur.

anneesin correspond a
Code :
anneesin = $_POST[annee];
Enfaite, comme la variable vient d'une autre page, je fais cela pour m'en servir sur celle ci.
Je pense que c'est pour ça que le script ne peut s'en servir directement car si je l'enleve ben a l'emplacement de l'age il y a l'année de naissance (logique)

Peut etre que cette info peut vous aider car mon code html est bien long mais si cela est necessaire je le mettrais en ligne.
kratos60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h11   #9
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Citation:
Envoyé par Auteur Voir le message
getElementsByName est une fonction qui retourne bien un tableau car plusieurs objets peuvent avoir le même name.
On est bien d'accord que la fonction getElementsByName renvoie une collection d'éléments, donc un tableau. ^^

Mais sans les "()" après le nom de la fonction, la fonction n'est pas appelée, on ne renvoie pas ce tableau (il n'y avait d'ailleurs pas le paramètre obligatoire).
A la place, on fait référence à l'objet contenant la fonction elle-même, donc c'est dans les propriétés de cet objet de type Function que la valeur entre crochets va être recherchée... ouille ma tête... on ne risque pas de trouver
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 16h18   #10
Invité de passage
 
Inscription : novembre 2010
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 20
Points : 3
Points : 3
J'ai enfin trouvé!!!

Et ben j'ai vraiment galéré en tout cas merci pour tout
Voila mon code pour ceux qui sont dans la meme galere que moi avec les variables php dans du javascript ^^

Code :
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
 
if (res)
    {
 
 
    if (mois <= 6) 	// date de naissance au 31/12 le plus proche est le 31/12 de l'année précédente.
    	{
    	document.forms["result_rpfa"].elements[element].value = jour + "/" + mois + "/" + annee;
        document.forms["result_rpfa"].elements[id1].value = <?php echo $_POST[annee];?> - annee +1 ;
    	}
    else		// date de naissance au 31/12 le plus proche est le 31/12 de l'année en cours.
    	{
            document.forms["result_rpfa"].elements[element].value = jour + "/" + mois + "/" + annee;
            document.forms["result_rpfa"].elements[id1].value = <?php echo $_POST[annee];?> - annee;
    	}
    			//prendre indice ("date" + i) afin de remplir la case age correspondante ("age" + i)
    if (document.forms["result_rpfa"].elements[id1].value < 0)
    	{
    	document.forms["result_rpfa"].elements[id1].value = 0;
    	}
 
    }
  else
    {
    alert("La date de naissance entrée n'est pas valide(elle doit etre de la forme jj/mm/aaaa ou un jour/mois n'est peut-être pas correct)");
    document.forms["result_rpfa"].elements[element].focus();
    }
  }
//return res;
}
kratos60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h00.


 
 
 
 
Partenaires

Hébergement Web