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 20/02/2011, 20h47   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 207
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 207
Points : 52
Points : 52
Par défaut Déclenchement conditionnel d'une fonction

Bonjour,

J'utilise un script qui rafraîchit une liste déroulante après la saisie dans un formulaire placé dans un pop-up. Pour cela je clique sur un lien (situé dans ma page principale)appelé "Créer un contributeur absent de la liste" : cela m'ouvre un pop-up, je saisis dans le formulaire le nom d'un nouveau contributeur, je valide et la liste des contributeurs se met à jour dans ma page principale (sans rechargement de cette dernière).

Code de la page pop-up :

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
31
32
33
34
35
36
37
38
 
 
<script type="text/javascript">
function doc(nom){
 
if (document.getElementById)
{
return document.getElementById(nom);
}
}
function valid()
{
value = doc('value').value;
text = doc('text').value;
opener.ajouter('nom', value, text);
}
 
</script>
<title>Popup</title>
</head>
<body>
<?php
// requete pour chercher le prochain identifiant
$requete="SELECT MAX(nummetier) AS nb FROM metier WHERE nummetier IN (SELECT nummetier FROM metier) ;";
$result=mysql_query($requete,$connexion);
$ligne=mysql_fetch_array($result);
$value = $ligne['nb'];
$value = $value + 1;
?>
<form action="" method="POST" onsubmit="valid();">
<p>
<?php
echo '<input type="hidden" name="value" id="value" value="'.$value.'" />';
?>
<br />
<input type="text" name="text" id="text" />
<br />
 <input type="submit" value="Ajouter" />
Code de la page principale :

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
31
32
33
34
35
 
<script>
function doc(nom)  {
if (document.getElementById)  {
return document.getElementById(nom);
 
	} 
		}
 
function ajouter(nom, value, text)  {
formulaire = doc(nom);
// Recuperation des informations
nb = formulaire.length;
// On compte le nombre d'<option />
nouvel_element = new Option(text, value, false, true);
 
// Creation
// new Option(text, value, DefaultSelected, Selected);
// * text = texte affiché dans la liste
// * value = valeur de la liste à transmettre (facultatif)
// * defaultSelected = transmettre true quand l'élément doit être l'élément sélectionné par défaut, sinon false (facultatif)
// * Selected = transmettre true quand l'élément doit être sélectionné (facultatif)
 
formulaire.options[nb] = nouvel_element;
// Ajout
}
</script>
 
<form action="update.php" method="POST">
<p><select name="nom" id="nom"> 
<option> value="..."</option>
...
</form>
<!-- ouvrir le popup -->
<a href="popup.php" onclick="window.open(this.href, 'H', 'width=200, height=200'); return false;">Créer un contributeur absent de la liste</a>
Le script fonctionne. Dans mon code php, je vérifie que le champ input n'est pas vide de façon à éviter des insertions de données vides dans ma base
(du style if (empty ($_POST['text']))
echo "Le champ nouveau contributeur est obligatoire <br/>"; ).

Le problème c'est qu'en cas de saisie vide dans la champ input, le script JavaScript s'effectue quand même et rapatrie une ligne "option value" vide dans la liste déroulante de ma page principale.
Comment faire en sorte que le script JavaScript ne se déclenche pas si l'utilisateur valide un champ input vide ? Merci d'avance de votre aide.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2011, 21h17   #2
Membre éclairé
 
Avatar de kimjoa
 
Inscription : février 2009
Messages : 318
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 318
Points : 360
Points : 360
faudrait faire la vérification d'abord au niveau du js, et ensuite une double vérification en php, si tu n'as pas le contrôle sur les clients, et de l'activation js.

Sinon, ton problème est tout simple, il suffit de tester la valeur.
Code :
if(valeur == "") return;
Meme si une expression régulière serait plus adapté

Tu utilises une popup pour ne pas recharger la page, il serait plus intéressant de le faire via AJAX, comme ça tu as le contrôle sur ce que tu envoies , et tu pourra formater la valeur, en enlevant par exemple les espace avant et après
kimjoa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2011, 22h36   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 207
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 207
Points : 52
Points : 52
Merci Kimjoa pour ta réponse. Mais je suis clairement débutant en JavaScript...
A quel endroit intégrer ton code ?
Citation:
Code :
if(valeur == "") return;
Au niveau de la fonction valid() ?

"valeur" désigne-t-elle la variable php $value ?
Code :
if($value == "") return;
Merci d'avance pour toute aide complémentaire.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2011, 22h55   #4
Membre éclairé
 
Avatar de kimjoa
 
Inscription : février 2009
Messages : 318
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 318
Points : 360
Points : 360
dans la fonction valid

Code :
1
2
3
4
5
6
7
function valid()
{
value = doc('value').value;
if(value == "")return;
text = doc('text').value;
opener.ajouter('nom', value, text);
}
kimjoa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 17h10   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 207
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 207
Points : 52
Points : 52
Merci pour ton code, il fonctionne (j'ai juste remplacé l'id en mettant celui du formulaire qui ne doit pas être vide : "text"):

Code :
1
2
3
4
5
6
7
8
9
function valid()
{
value = doc('value').value;
 
text = doc('text').value;
if(text == "")return;
 
opener.ajouter('nom', value, text);
}
Je rebondis sur le sujet car j'effectue une seconde vérification dans mon code PHP. La donnée saisie dans le champ input (name "text" dans le code du popup) doit être sous la forme : nom, prénom (soit un délimiteur comportant une virgule + un espace)

Code :
1
2
3
4
5
6
7
8
9
10
$text=trim(mysql_real_escape_string($_POST['text']));				
$text = explode(", ", $text); 
 
	if (count($text)==2) { requête...}
 
        else {
 
echo"format saisie incorrecte";
 
               }
Comment m'y prendre pour que le code JavaScript ne s'exécute pas si la saisie de l'utilisateur ne correspond pas au bon format (de même qu'il ne s'exécute pas si le champ est vide à la soumission). Merci de vos avis sur la question.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 18h43   #6
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
hum; tu pourrais éviter de poster du php pour régler un problème javascript?
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 13h09   #7
Membre du Club
 
Inscription : janvier 2010
Messages : 207
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 207
Points : 52
Points : 52
Au temps pour moi. Je craignais de ne pas bien exposer ma problématique sans extrait du code PHP. J'ai fait différents essais pour arriver au résultat escompté. Je pensais qu'en faisant cela :

Code :
1
2
3
4
5
6
7
8
9
10
 
if( ma_condition){//si ma condition est remplie (bon format de saisie)
?>
<script language="JavaScript" type="text/JavaScript">
ma fonction valid(){
...
}
</script>
<?php
}//fin du if php
Cela marcherait mais ce n'est pas le cas : le code JavaScript s'exécute toujours même si la saisie de l'utilisateur ne correspond pas au bon format...
Voyez-vous une solution ? Merci.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h42.


 
 
 
 
Partenaires

Hébergement Web