Une fonction liée à un évènement (ex: onBlur, onSubmit) qui ne s'exécute pas...

Résolu
kharshak Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 8 septembre 2009 - 8 sept. 2009 à 14:12
kharshak Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 8 septembre 2009 - 8 sept. 2009 à 15:15
Bonjour à toi,

J'ai un petit problème avec mon code. J'ai une page HTML avec un "joli" formulaire, et des actions de vérification à faire sur certains champs, dès qu'ils perdent le focus (onBlur, si je ne m'abuse). De même, j'ai une vérification générale (les mêmes, mais regroupées) au moment de soumettre le formulaire (onSubmit). Mais aucune ne s'exécute ! J'ai essayer de remplacer dans mon code le nom de la fonction par un "alert('test')", et le message est bien apparu. J'en conclus donc que JS est activé, que les évènements sont actifs, mais je ne comprends pas pourquoi mes fonctions ne s'exécutent pas !!!
Navigateurs testés : FF 3.0.11 et IE 7

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="fr" />
<link href="style.css" rel="stylesheet" type="text/css" media="screen">
<title>Demande de BL</title>
</head>


<form id="form_demande_BL" method="post" enctype="text/plain" onSubmit="return verifForm(this)">



<fieldset>
<legend>Validation</legend>

</fieldset>




<fieldset>
<legend>Informations préalables</legend>
<label for="demandeur">Demandeur : </label>
<select name="demandeur" id="demandeur" tabindex="1">
<option value="test1">Test1</option>
<option value="test2">Test2</option>
</select>

<label for="cdp_concerne">Chef de projet concerné : </label>
<select name="cdp_concerne" id="cdp_concerne" tabindex="2">
<option value="test1">Test1</option>
<option value="test2">Test2</option>
</select>
</fieldset>




<fieldset>
<legend>Informations pour le BL</legend>
<label for="redacteur">Rédacteur : </label>
<select name="redacteur" id="redacteur" tabindex="3">
<option value="test1">Test1</option>
<option value="test2">Test2</option>
</select>

<label for="destinataire">Destinataire : </label>


<label for="lot">Lot : </label>
<select name="lot" id="lot" tabindex="5">
<option value="test1">Test1</option>
<option value="test2">Test2</option>
</select>

<label for="date_livraison">Date de livraison prévue : </label>


Support : e-room  et/ou e-mail 
</fieldset>




<fieldset>
<legend>Notes techniques et mémos</legend>
<label for="reference">Référence : </label>


<label for="titre">Titre : </label>


</fieldset>


</form>

<script type="text/javascript" src="verifJS.js"></script>


</html>


et le fichier "verifJS.js" :
function surligne(champ, erreur)
{
if(erreur)
champ.style.backgroundColor = "#fba";
else
champ.style.backgroundColor = "";
}

function verifDestinataire(champ)
{
alert('test');
if(champ.value.length < 2)
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}

function verifReference(champ)
{
var regex = /^(NT|ME)_[a-zA-Z]{2,}_[0-9]{2,}_[0-9]**$/;
if (!regex.test(champ.value))
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}

function verifTitre(champ)
{
if(champ.value.length < 2)
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}

function verifDate(champ)
{
var regex=/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!regex.test(champ.value))
{
surligne(champ, true);
return false;
}
else
{
var decoupe=champ.value.split("/");
var jour=parseInt(decoupe[0],10);
var mois=parseInt(decoupe[1],10);
var annee=parseInt(decoupe[2],10);
if (isNaN(jour) || jour < 1 || jour > 31)
{
surligne(champ, true);
return false;
}
else if (isNaN(mois) || mois < 1 || mois > 12)
{
surligne(champ, true);
return false;
}
else if (isNaN(annee))
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}
}

function verifForm(f)
{
var destinataireOK = verifDestinataire(f.destinataire);
var referenceOK = verifReference(f.reference);
var titreOK = verifTitre(f.titre);
var dateOK = verifDate(f.date_livraison);

if (destinataireOK && referenceOK && titreOK && dateOK)
f.setAttribute("action", "mailto:"+f.cdp_concerne.value+"?subject=Demande de BL");
return true;
else
{
alert("Veuillez remplir correctement tous les champs");
return false;
}
}


Merci d'avance pour ton aide !

3 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
8 sept. 2009 à 14:24
Bonjour,
pour tester, j'ai rapatrié le .js
dans le html...
et en testant, avec k-meleon, par exemple :

Erreur : invalid quantifier *$
Fichier source : file:///...new%201.htm
Ligne : 153, Colonne : 13
Code source :
var regex = /^(NT|ME)_[a-zA-Z]{2,}_[0-9]{2,}_[0-9]**$/;

pas été plus loin donc....
1ère chose à faire : debogguer


Cordialement [mon Site] [M'écrire] Bul
3
kharshak Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 8 septembre 2009
8 sept. 2009 à 14:46
Merci Blu3 de t'intéresser à mon sujet.
J'avoue que je n'ai pas de déboggueur Javascript. Ceci dit, même si la regex est bogguée (on pourrait la remplacer par quelque chose de moins contraignant et valide comme /^(NT|ME)_[a-zA-Z]{2,}_[0-9]{2,}_[a-zA-Z0-9_.-]*$/), elle ne doit pas empêcher l'exécution des autres fonctions, normalement.

PS : comment fais-tu pour récupérer le genre de message d'erreur que tu as mis ? ça pourrait m'aider .
0
kharshak Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 8 septembre 2009
8 sept. 2009 à 15:15
Correctif.
Effectivement, un peu de déboggage peut aider. Il y avait un problème d'accolades manquantes. Maintenant, ça marche !!
Encore merci !

PS : je n'ai toujours pas trouver le déboggueur JS avec FireBug, mais la console d'erreur a suffi pour cette fois.
0
Rejoignez-nous