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 :

Appels JS - Portée des fonctions


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut Appels JS - Portée des fonctions
    Bonjour à tous et merci d'avance pour votre aide.

    Mon problème est l'appel de fonction qui génère l'erreur Firebug suivante :
    ReferenceError: ValidatefrmContact is not defined
    if (ValidatefrmContact(document.forms.frmContact) == false)
    Possibilité de test
    • La page en erreur est sur plpconsulting.free.fr/index.php
    • A contrario, un exemple qui fonctionne parfaitement bien sur le même structure est dispo sur plpconsulting.free.fr/ValidationRules/index.php. Par contre le formulaire directement dans la page


    Objectif
    Sur la base d'un doc proposé sur developpez.net par G. Donat "Introduction à Ajax et interaction avec PHP", j'envoie des données saisies dans un formulaire HTML au format XML via l'objet XMLHttpRequest (fichier jsSendMail.js) à un fichier PHP (phpSendMail.php) qui envoie par mail les données saisies dans le formulaire HTML.

    Dans jsSendMail.js:

    fonction jsInitValue
    • Test des contraintes de validation par appel de la fonction ValidatefrmContact qui est déclarée dans le Header de la page HTML (Voir 3ème bloc de code dans Header)
    • Récupération des données du formulaire si test validation OK
    • Appel de jsCallScript


    fonction jsCallScript
    • envoi au format XML par méthode post des données saisies dans le formulaire au fichier phpSendMail.php


    Dans phpSendMail.php
    • Envoi d'un mail avec les données saisies dans le formulaire HTML


    Info importante
    le formulaire est intégré dans un objet Onglet JQuery (Voir 2ème bloc de code du Header)

    Dans Header, il y a :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include "jsSendEmail.js";?>

    Une page avec un objet Onglet (tab) JQuery.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document).ready(function()
    {
       var jQueryTabs1Opts =
       {
          show: false,
          event: 'click',
          collapsible: false
       };
       $("#jQueryTabs1").tabs(jQueryTabs1Opts);
    ... Liste des autres contrôles JQuery

    Une fonction de contrôle des règles de validations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ValidatefrmContact(theForm)
    {   var regexp;
       if (theForm.subject.selectedIndex < 0)
       {
          alert("Saisie incorrecte ou manquante");
          theForm.subject.focus();
          return false;
       }
    ... autres contrôles
    }
    Dans body, il y a :

    la déclaration du contrôle Onglet avec tous les contrôles associés
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="jQueryTabs1" style="position:absolute;left:24px;top:66px;width:1391px;height:837px;z-index:176;"> 
     
    ........ Liste des autres contrôles associés
     
    </div>


    Et dans le 4ème onglet, un contrôle formulaire
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div id="wb_frmContact" style="position:absolute;left:49px;top:69px;width:438px;height:730px;z-index:101;">
    <form name="frmContact" method="post" action="" enctype="text/plain" id="frmContact" onsubmit="return ValidatefrmContact(this)">
    <input type="text" id="firstname" style="position:absolute;left:104px;top:45px;width:313px;height:23px;line-height:23px;z-index:59;" name="name" value="" tabindex="2">
     
    ... Liste des autres contrôles associés
     
    ...Et bien sûr le bouton avec even = onclick qui appelle une fonction jsInitValue() du <?php include "jsSendEmail.js";?> (Cf Header
     
    <input type="button" id="btSend" onclick="jsInitValue();return false;" name="" value="Envoyé" style="position:absolute;left:322px;top:693px;width:96px;height:25px;z-index:94;" tabindex="18">
    </form>

    La fonction jsInitValue.js appelle ValidatefrmContact(document.forms.frmContact) et passe en paramètre le formulaire le formulaire frmContact

    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
    function jsInitValue() {
    	if (ValidatefrmContact(document.forms.frmContact) == false) 
    	{	var alerte = "opération annulée. Données obligatoires non saisies ou problème de format";
    		alert (alerte); 
    		return false;
    	}
     
    	var _subject =  $("#subject option:selected").text();
    	var _firstname = $("#firstname").val();
    	var _name = $("#name").val();
    	var _email = $("#email").val();
    	var _message = $("#message").val();
    	[... ]
    	var _data = "name="+_name+"&firstname="+_firstname+"&email=" +_email+"&message="+_message
    	[... ]
     
    	// --- Appel au script PHP de traitement
    	var _scriptName ="phpSendEmail.php";
    	jsCallScript(_scriptName,_data);
    	alert("Fin de traitement"); 
    }
     
    function jsCallScript(scriptName, data) {
     
    	var xhr_object = null; 
    	if (window.XMLHttpRequest) { xhr_object = new XMLHttpRequest(); }
    	else if (window.ActiveXObject) { xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); }
    	else
    	{ alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    		return;
    	}
    	xhr_object.open("POST", scriptName, true);
    	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	xhr_object.send(data);
    }

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Que vient faire un include PHP avec un fichier .js ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, 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
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bonjour,
    Mon problème est l'appel de fonction car avec mon code même si elle existe elle n'est pas reconnu.
    et elle s'appelle comment cette fonction ? Plutôt qu'une centaine de lignes de code, est-ce qu'on ne pourrait pas simplement avoir la ligne où tu la définis et la ligne où tu l'appelles ?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut Portée des fonctions
    Bonjour ,

    Je comprends mieux vos questions car il s'avère que mon post a été dupliqué en raison de timeout successives et c'est bien sûr le post définitif qui a été supprimé.

    Je vous remercie de relire mon 1er post qui est maintenant modifié pour être plus explicite.

    Par contre, comme je ne développe que depuis quelques jours sans connaissances en HTML, JavaScript et PHP, il se peut que les appels aux librairies et fichiers externes soient plus que douteux alors si vous avez des conseils je suis preneur

    Enfin, suite à ta remarque Bovino, j'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include "SendEmail.js";?>
    Et l'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="SendEmail.js"></script>
    et ça marche bien sûr:

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Par défaut
    tu as une erreur de syntaxe dans la fonction

    jolie musique lassant à force

    je te laisse chercher, il n'y pas de raison que tu listes javascript comme langage sur ton CV et que tu ne saches la corriger par toi-même

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    Bonjour fredoche,

    Tu as raison sur le fond mais aide moi un peu tout de même en me filant une piste
    C'est sur l'appel de la fonction ValidatefrmContact () ou sur autre chose???

    Quand un truc t'échappe tu peux avoir le nez collé dessus, tu vois rien, effet dit brouillard ou grosse bouse au choix

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

Discussions similaires

  1. Portée des fonctions JS
    Par lolo-d dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/08/2013, 14h55
  2. [XL-2010] Appel de fonction, portée des variables
    Par PolyAmide dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/08/2011, 14h17
  3. [Toutes versions] Portée des fonctions : comment créer une fonction commune à tous les classeurs ?
    Par akr54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2010, 11h29
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

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