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 :
Possibilité de testReferenceError: ValidatefrmContact is not defined
if (ValidatefrmContact(document.forms.frmContact) == false)
- 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
Dans body, il y a :
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 }
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); }
Partager