phpJSvForm
v11.11.12
Des classes PHP, des JavaScripts pour créer facilement un formulaire.
|
00001 /******************************************************************************* 00002 This file is part of 'phpJSvForm'. 00003 Copyright (C) 2010-2011 Pierre POISSON (synanceia) 00004 00005 'phpJSvForm' is free software: you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation, either version 3 of the License, or 00008 (at your option) any later version. 00009 00010 'phpJSvForm' is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with 'phpJSvForm'. If not, see <http://www.gnu.org/licenses/>. 00017 *******************************************************************************/ 00018 00028 /******************************************************************************* 00029 Historique : ------------------------------------------------------------------- 00030 04/08/2010 PP Création du fichier 00031 14/08/2010 PP Première version finalisée 00032 15/08/2010 PP Ajout de la classe 'Boutons' 00033 26/08/2010 PP Ajout prise en compte du style CSS 'cssObligatoire' 00034 30/09/2010 PP Correction dysfonctionnement : mise en forme des dates 00035 21/02/2011 PP Modification expression régulière pour URL 00036 26/07/2011 PP Si les objets sont inhibés (disabled) alors le format des champs n'est pas vérifié 00037 28/07/2011 PP Ajout : inhibition de champs si case à cocher... 00038 24/08/2011 PP Ajout : 'selectall_', un click sur une case particulière permet de valider automatiquement un ensemble de case à cocher 00039 01/11/2011 PP Validation automatique du formulaire (en l'absence du bouton 'Valider') dès qu'un champ est modifié 00040 xx/11/2011 PP Documentation au format doxygen 00041 *******************************************************************************/ 00042 00047 function jsTrim (myString) 00048 { 00049 return myString.replace(/^\s+/g,'').replace(/\s+$/g,'') 00050 } 00051 00055 function chargementVerifForm() 00056 { 00057 var i, imax ; 00058 var selectForm ; 00059 if((selectForm=document.getElementsByTagName("form")) != null ) 00060 { 00061 for(i=0, imax=selectForm.length; i<imax; i++) 00062 { 00063 prepareFormulaire(selectForm[i]) ; 00064 } 00065 } 00066 } 00067 00072 function prepareFormulaire(formulaire) 00073 { 00074 var selectInput ; // Tableau d'objets 00075 var selectObjet, selectChk, selectDest, selectLabel, newHidden ; // Objet 00076 var listeObj, idForm ; // Chaines de caractères 00077 var match ; // Tableau de 2 chaines de caractères 00078 var i, imax, j, jmax ; // Entier 00079 var valid_auto=false ; // Booléen validation automatique si Btn valid_nodisp supprimé 00080 00081 idForm=formulaire.id ; 00082 00083 if((selectObjet=document.getElementById(idForm+"__valid_nodisp")) != null) 00084 { //Suppression du bouton "Valider" qui doit être caché si javascript activé ! (soumission automatique) 00085 var attribut ; 00086 if(selectObjet.getAttribute("type") == "submit") 00087 { 00088 selectObjet.setAttribute("type", "hidden") 00089 valid_auto = true ; 00090 if((selectObjet=document.getElementById(idForm+"__reinit")) != null) 00091 { //Modification comportement du bouton "Réinitialiser" (soumission automatique) 00092 selectObjet.type="button" ; 00093 add_Event(selectObjet,"click",function(){ 00094 if((selectObjet=document.getElementById(idForm+"__valid_nodisp")) != null) 00095 { 00096 selectObjet.value="Réinitialiser" ; 00097 } 00098 this.form.submit();}); 00099 } 00100 } 00101 } 00102 else if((selectObjet=document.getElementById(idForm+"__reinit")) != null) 00103 { //Suppression du bouton "Réinitialiser" qui devient inutile si javascript activé ! (sauf si soumission automatique) 00104 selectObjet.parentNode.removeChild(selectObjet); 00105 } 00106 00107 00108 if((selectObjet=document.getElementById(idForm+"__annuler")) != null) 00109 { //Modification comportement du bouton "Annuler" 00110 selectObjet.type="button" ; 00111 add_Event(selectObjet,"click",function(){this.form.reset(); nettoieFormulaireApresRAZ(this.form);}); 00112 } 00113 00114 if((selectInput=formulaire.getElementsByTagName("textarea")) != null) 00115 { 00116 for(i=0, imax=selectInput.length; i<imax; i++) 00117 { 00118 prepareObjet(selectInput[i], formulaire, valid_auto) ; 00119 } 00120 } 00121 00122 if((selectInput=formulaire.getElementsByTagName("select")) != null) 00123 { 00124 for(i=0, imax=selectInput.length; i<imax; i++) 00125 { 00126 prepareObjet(selectInput[i], formulaire, valid_auto) ; 00127 } 00128 } 00129 00130 if((selectInput=formulaire.getElementsByTagName("input")) != null) 00131 { 00132 for(i=0, imax=selectInput.length; i<imax; i++) 00133 { 00134 if(selectInput[i].type=="text" || selectInput[i].type=="password") 00135 { 00136 prepareObjet(selectInput[i], formulaire, valid_auto) ; 00137 } 00138 else if(selectInput[i].type=="radio" || selectInput[i].type=="checkbox" || selectInput[i].type=="button") 00139 { 00140 if(valid_auto) prepareObjet_validAuto(selectInput[i], formulaire) ; 00141 } 00142 else if(selectInput[i].type=="hidden") 00143 { 00144 if((match= new RegExp("^"+idForm+"__(.*)").exec(selectInput[i].id)) != null) 00145 { 00146 listeObj=selectInput[i].value.split(' ') ; 00147 if(/^exist_/.test(match[1])) 00148 { // Le formulaire possède des champs obligatoires dont l'obligation estconditionnée par une case à cocher ? 00149 selectChk=document.getElementById(listeObj[0]) ; // sélection de la case à cocher 00150 if(selectChk.type=="checkbox") 00151 { 00152 add_Event(selectChk,"click",function() {clickChkVerifExist(this);}); 00153 selectChk.listeObj=selectInput[i].value ; 00154 if(!selectChk.checked) 00155 { 00156 for(j=1, jmax=listeObj.length; j<jmax; j++) 00157 { 00158 selectObjet=document.getElementById(listeObj[j]) ; 00159 selectObjet.disabled=true; 00160 } 00161 } 00162 else 00163 { 00164 for(j=1, jmax=listeObj.length; j<jmax; j++) 00165 { 00166 selectObjet=document.getElementById(listeObj[j]) ; 00167 jscss('add',selectObjet,'cssObligatoire') ; 00168 selectLabel=RecherchePrecedentTag(selectObjet,'label') ; 00169 jscss('add',selectLabel,'cssObligatoire') ; 00170 } 00171 } 00172 } 00173 } 00174 else if(/^copie_/.test(match[1])) 00175 { 00176 // Le formulaire possède des champs recopiés automatiquement selon l'état d'une case à cocher 00177 selectChk=document.getElementById(listeObj[0]) ; // sélection de la case à cocher 00178 if(selectChk.type=="checkbox") 00179 { 00180 add_Event(selectChk, "click", function() {clickChkCopie(this);}) ; 00181 selectChk.listeObj=selectInput[i].value ; 00182 for(j=2, jmax=listeObj.length; j<jmax; j+=2) 00183 { 00184 selectObjet=document.getElementById(listeObj[j]) ; 00185 add_Event(selectObjet,"blur",function(){copieValeur(this);}) ; 00186 selectObjet.destination=listeObj[j-1] ; 00187 selectObjet.chkBox=listeObj[0] ; 00188 00189 if(selectChk.checked) 00190 { 00191 selectDest = document.getElementById(listeObj[j-1]) ; 00192 selectDest.disabled=true; 00193 selectDest.value=selectObjet.value ; 00194 } 00195 } 00196 } 00197 00198 } 00199 else if(/^egal_/.test(match[1])) 00200 { 00201 selectObjet=document.getElementById(listeObj[0]) ; // sélection du 1er champ (la référence) 00202 add_Event(selectObjet,"change",function() {egalRef(this);}) ; 00203 selectObjet.listeObj=selectInput[i].value ; 00204 egalRef(selectObjet) ; // initialisation des différents champs... 00205 for(j=1, jmax=listeObj.length; j<jmax; j++) 00206 { 00207 selectObjet=document.getElementById(listeObj[j]) ; 00208 add_Event(selectObjet, "blur", function(){egalVerif(this);}); 00209 selectObjet.reference=listeObj[0] ; 00210 } 00211 } 00212 else if(/^desact_/.test(match[1])) // (28/07/2011 - PP) 00213 { 00214 // Le formulaire possède des champs désactivés si une case est cochée 00215 selectChk=document.getElementById(listeObj[0]) ; // sélection de la case à cocher 00216 if(selectChk.type=="checkbox") 00217 { 00218 add_Event(selectChk,"click",function() {clickChkDesact(this);}); 00219 selectChk.listeObj=selectInput[i].value ; 00220 if(selectChk.checked) 00221 { 00222 for(j=1, jmax=listeObj.length; j<jmax; j++) 00223 { 00224 selectObjet=document.getElementById(listeObj[j]) ; 00225 selectObjet.disabled=true; 00226 } 00227 } 00228 } 00229 } 00230 else if(/^selectall_/.test(match[1])) // (xx/08/2011 - PP) 00231 { 00232 // Le formulaire possède une case à cocher du stype "Sélectionner/déselectionner tout" 00233 selectChk=document.getElementById(listeObj[0]) ; // sélection de la case à cocher 00234 if(selectChk.type=="checkbox") 00235 { 00236 add_Event(selectChk,"click",function() {clickChkSelectAll(this);}); 00237 selectChk.listeObj=selectInput[i].value ; 00238 if(selectChk.checked) 00239 { 00240 for(j=1, jmax=listeObj.length; j<jmax; j++) 00241 { 00242 selectObjet=document.getElementById(listeObj[j]) ; 00243 selectObjet.checked=true; 00244 } 00245 } 00246 } 00247 } 00248 else if((" date tel url courriel login codePostal APE SIRET NIRPP ").indexOf(" "+match[1]+" ")!=-1) 00249 { 00250 for(j=0, jmax=listeObj.length; j<jmax;j++) 00251 { 00252 selectObjet=document.getElementById(listeObj[j]) ; 00253 eval("add_Event(selectObjet,\"blur\", function(){verif_"+match[1]+"(this) ;});") ; 00254 //La chaîne transmis à la méthode eval sera interprétée comme un élément de script. 00255 } 00256 } 00257 } 00258 } 00259 } 00260 } 00261 00262 formulaire.onsubmit=function(){ return (verifAvantSoumission() == 0); } 00263 } 00264 00269 function nettoieFormulaireApresRAZ(formulaire) 00270 { 00271 var selectInput ; 00272 var i, imax; 00273 if((selectInput=formulaire.getElementsByTagName("textarea")) != null) 00274 { 00275 for(i=0, imax=selectInput.length; i<imax; i++) 00276 { 00277 nettoieObjetApresRAZ(selectInput[i]) ; 00278 } 00279 } 00280 00281 if((selectInput=formulaire.getElementsByTagName("select")) != null) 00282 { 00283 for(i=0, imax=selectInput.length; i<imax; i++) 00284 { 00285 nettoieObjetApresRAZ(selectInput[i]) ; 00286 } 00287 } 00288 00289 if((selectInput=formulaire.getElementsByTagName("input")) != null) 00290 { 00291 for(i=0, imax=selectInput.length; i<imax; i++) 00292 { 00293 if("text radio checkbox password".indexOf(selectInput[i].type)!=-1) 00294 nettoieObjetApresRAZ(selectInput[i]) ; 00295 } 00296 } 00297 } 00298 00305 function nettoieFormulaireAvantSoumission(formulaire) 00306 { 00307 var SelectInput ; 00308 var i, imax; 00309 // Si un champ vaut textInfo alors il faut le vider avant vérifications et soumission 00310 if((selectInput=formulaire.getElementsByTagName("textarea")) != null) 00311 { 00312 for(i=0, imax=selectInput.length; i<imax; i++) 00313 { 00314 if(selectInput[i].textInfo) if(selectInput[i].value==selectInput[i].textInfo) selectInput[i].value=""; 00315 } 00316 } 00317 00318 if((selectInput=formulaire.getElementsByTagName("select")) != null) 00319 { 00320 for(i=0, imax=selectInput.length; i<imax; i++) 00321 { 00322 if(selectInput[i].textInfo) if(selectInput[i].value==selectInput[i].textInfo) selectInput[i].value=""; 00323 } 00324 } 00325 00326 if((selectInput=formulaire.getElementsByTagName("input")) != null) 00327 { 00328 for(i=0, imax=selectInput.length; i<imax; i++) 00329 { 00330 if(selectInput[i].textInfo) if(selectInput[i].value==selectInput[i].textInfo) selectInput[i].value=""; 00331 } 00332 } 00333 } 00334 00347 function prepareObjet(champ, formulaire, valid_auto) 00348 { 00349 var selectObjet, selectOption ; 00350 00351 add_Event(champ,"mouseover",function(){ 00352 if(this.textInfo) 00353 { 00354 if (this.value!=this.textInfo && this.memoValue!=this.value){ 00355 if(this.memoValue=="" && this.value.indexOf(this.textInfo)==0) this.value=(this.value.substr(this.textInfo.length)) ; 00356 this.focus() ; 00357 } 00358 } 00359 else 00360 { 00361 if (this.memoValue!=this.value) this.focus() ; 00362 } 00363 }); 00364 00365 if(valid_auto) 00366 { 00367 add_Event(champ,"change",function(){ 00368 this.memoValue = this.value ; 00369 if (verifAvantSoumission()==0) 00370 if(jscss("check",this,"cssAvert")) 00371 window.setTimeout("var form=document.getElementById('"+formulaire.id+"');form.submit();",1000) ; 00372 else 00373 formulaire.submit() ; 00374 }) ; 00375 00376 add_Event(champ,"blur",function(){ 00377 if(this.value=="" && this.textInfo) 00378 { 00379 this.value=this.textInfo ; 00380 jscss("add",this,"cssTextInfo") ; 00381 } 00382 if(this.value!=this.memoValue) 00383 if (verifAvantSoumission()==0) 00384 if(jscss("check",this,"cssAvert")) 00385 window.setTimeout("var form=document.getElementById('"+formulaire.id+"');form.submit();",1000) ; 00386 else 00387 formulaire.submit() ; 00388 }); 00389 } 00390 else 00391 { 00392 add_Event(champ,"change",function(){ 00393 this.memoValue = this.value ; 00394 }) ; 00395 00396 add_Event(champ,"blur",function(){ 00397 if(this.value=="" && this.textInfo) 00398 { 00399 this.value=this.textInfo ; 00400 jscss("add",this,"cssTextInfo") ; 00401 } 00402 }); 00403 } 00404 00405 add_Event(champ,"focus",function(){ 00406 nettoieObjet(this); 00407 }); 00408 00409 champ.memoValue=champ.value ; 00410 00411 if(champ.previousSibling) selectObjet=champ.previousSibling ; 00412 while(selectObjet.previousSibling && !selectObjet.tagName) 00413 { 00414 selectObjet=selectObjet.previousSibling ; 00415 } 00416 00417 if(selectObjet.tagName && selectObjet.className) 00418 { 00419 if(selectObjet.tagName.toLowerCase()=="span" && selectObjet.className=="invisible") 00420 { 00421 champ.textInfo=selectObjet.firstChild.nodeValue ; 00422 if (champ.tagName.toLowerCase()=="select") 00423 { 00424 selectOption=document.createElement('option'); 00425 selectOption.value=champ.textInfo ; 00426 selectOption.appendChild(document.createTextNode(champ.textInfo)); 00427 selectOption.disabled=true ; 00428 champ.insertBefore(selectOption,champ.firstChild); 00429 } 00430 00431 if(champ.value=="") 00432 { 00433 champ.value=champ.textInfo ; 00434 jscss("add",champ,"cssTextInfo") ; 00435 } 00436 } 00437 } 00438 } 00439 00446 function prepareObjet_validAuto(champ, formulaire) 00447 { 00448 if(champ.type=="button") 00449 { 00450 add_Event(champ,"click",function(){ 00451 if (verifAvantSoumission()==0) 00452 if(jscss("check",this,"cssAvert")) 00453 window.setTimeout("var form=document.getElementById('"+formulaire.id+"');form.submit();",1000) ; 00454 else 00455 formulaire.submit() ; 00456 }) ; 00457 } 00458 else 00459 { 00460 add_Event(champ,"change",function(){ 00461 if (verifAvantSoumission()==0) 00462 if(jscss("check",this,"cssAvert")) 00463 window.setTimeout("var form=document.getElementById('"+formulaire.id+"');form.submit();",1000) ; 00464 else 00465 formulaire.submit() ; 00466 }) ; 00467 } 00468 } 00469 00475 function nettoieObjet(champ) 00476 { 00477 var selectTexte ; 00478 00479 //Enlever les mises en forme spéciales avant de traiter l'objet 00480 jscss("remove",champ,"cssAvert") ; 00481 jscss("remove",champ,"cssErreur") ; 00482 //Enlever le 'textInfo' s'il existe... 00483 jscss("remove",champ,"cssTextInfo") ; 00484 champ.value=jsTrim(champ.value) ; // Suppression des espaces avant/après 00485 if(champ.textInfo) if(champ.value==champ.textInfo) champ.value="" ; 00486 00487 //Supprimer la balise <span> qui suit si elle existe ... 00488 selectTexte=document.getElementById('span__'+champ.id) ; 00489 if(selectTexte){ 00490 selectTexte.parentNode.removeChild(selectTexte.previousSibling); // suppression du saut 00491 selectTexte.parentNode.removeChild(selectTexte); 00492 } 00493 } 00494 00500 function nettoieObjetApresRAZ(champ) 00501 { 00502 nettoieObjet(champ) ; 00503 champ.memoValue=champ.value ; 00504 if(champ.textInfo && champ.value=="") 00505 { 00506 champ.value=champ.textInfo ; 00507 jscss("add",champ,"cssTextInfo") ; 00508 } 00509 } 00510 00521 function actualiseObjet(champ, aTester, misEnForme, expReg, messErr) 00522 { 00523 var selectTexte, selectBalises, selectSaut, suivant ; 00524 var message="", i ; 00525 var erreur=0 ; 00526 00527 if (jscss("check",champ,"cssErreur","cssAvert")) nettoieObjet(champ) ; 00528 00529 if (!expReg.test(misEnForme)) 00530 { 00531 message=messErr ; 00532 jscss("add",champ,"cssErreur") ; //Ajoute la class 'cssErreur' (fond rouge) 00533 erreur=1 ; 00534 } 00535 else if (misEnForme!=aTester) 00536 { 00537 message="▲ Ce champ a été remis en forme." ; 00538 champ.value=misEnForme ; 00539 jscss("add",champ,"cssAvert") ; //Ajoute la class 'cssAvert' (fond jaune) 00540 } 00541 if (message) 00542 { // Créer la balise <span class='petit'>...</span> et l'insérer après le champ testé ! 00543 selectSaut=document.createElement('br'); 00544 selectTexte=document.createElement('span'); 00545 selectTexte.id='span__'+champ.id; 00546 selectTexte.className='petit'; 00547 selectTexte.className='rouge'; 00548 selectTexte.appendChild(document.createTextNode(message)); 00549 00550 //Recherche de la balise <br/> suivante... pour ajouter notre message juste avant. 00551 suivant=RechercheSuivantTag(champ, "br") ; 00552 champ.parentNode.insertBefore(selectSaut,suivant); 00553 champ.parentNode.insertBefore(selectTexte,suivant); 00554 } 00555 return erreur ; 00556 } 00557 00566 function verifExist(formObjet, nomTest, chaineListeObj) 00567 { 00568 var selectObjet ; // Un noeud 00569 var retour=0, initFor, i, imax, j, jmax ; 00570 var listeObj, listeInput ; // Tableau de chaines 00571 var coche ; // Booléen 00572 00573 listeObj=chaineListeObj.split(' ') ; 00574 if(nomTest=="exist") 00575 { 00576 initFor=0 ; 00577 } 00578 else // Existence à vérifier si 1er objet (case à cocher) est cochée ! 00579 { 00580 selectObjet=document.getElementById(listeObj[0]) ; // sélection de la case à cocher 00581 if(selectObjet.type=="checkbox") 00582 if(selectObjet.checked) 00583 initFor=1 ; 00584 else 00585 initFor=listeObj.length; // la boucle ne sera pas parcourue 00586 } 00587 for(i=initFor, imax=listeObj.length; i<imax; i++) 00588 { 00589 if(listeObj[i].indexOf(',')!=-1) 00590 { // On peut supposer qu'il s'agit d'un ensemble de boutons radio ou de cases à cocher 00591 listeInput=listeObj[i].split(',') ; 00592 coche=false; 00593 for(j=0, jmax=listeInput.length; j<jmax ; j++) 00594 { 00595 selectObjet=document.getElementById(listeInput[j]) ; 00596 if(selectObjet.checked) coche=true; 00597 } 00598 if(!coche) 00599 { 00600 nettoieObjet(selectObjet) ; 00601 actualiseObjet(selectObjet,selectObjet.value,"",/ /,"▲ Ce champ est obligatoire") ; 00602 retour+=1 ; 00603 } 00604 } 00605 else 00606 { 00607 selectObjet=document.getElementById(listeObj[i]) ; 00608 if(selectObjet) 00609 { 00610 selectObjet.value=jsTrim(selectObjet.value) ; 00611 // Si selectObjet est une case à cocher il faut vérifier si elle est cochée, sinon un test sur value suffit 00612 if(selectObjet.type=="checkbox") 00613 { 00614 if(!selectObjet.checked) 00615 { 00616 nettoieObjet(selectObjet) ; 00617 actualiseObjet(selectObjet,selectObjet.value,"",/ /,"▲ Ce champ est obligatoire") ; 00618 retour+=1 ; 00619 } 00620 } 00621 else 00622 { 00623 if((!selectObjet.value)&& !selectObjet.disabled) 00624 // Si selectObjet est inhibé alors le test n'est pas effectué... 00625 { 00626 nettoieObjet(selectObjet) ; 00627 actualiseObjet(selectObjet,selectObjet.value,"",/ /,"▲ Ce champ est obligatoire") ; 00628 retour+=1 ; 00629 } 00630 } 00631 } 00632 else 00633 { 00634 alert ("phpJSvForm /ERREUR/ Objet non trouvé : "+listeObj[i]) ; 00635 } 00636 } 00637 } 00638 return retour ; 00639 } 00640 00646 function clickChkVerifExist(Objet) 00647 { 00648 var selectObjet, selectLabel ; 00649 var listeObj=Objet.listeObj.split(' ') ; 00650 var j, jmax=listeObj.length ; 00651 00652 if(Objet.checked) 00653 { 00654 for(j=1; j<jmax; j++) 00655 { 00656 selectObjet=document.getElementById(listeObj[j]) ; 00657 selectObjet.disabled=false; 00658 jscss('add',selectObjet,'cssObligatoire') ; 00659 selectLabel=RecherchePrecedentTag(selectObjet,'label') ; 00660 jscss('add',selectLabel,'cssObligatoire') ; 00661 } 00662 } 00663 else 00664 { 00665 for(j=1; j<jmax;j++) 00666 { 00667 selectObjet=document.getElementById(listeObj[j]) ; 00668 selectObjet.disabled=true; 00669 // selectObjet.value=""; 00670 nettoieObjet(selectObjet); 00671 jscss('remove',selectObjet,'cssObligatoire') ; 00672 selectLabel=RecherchePrecedentTag(selectObjet,'label') ; 00673 jscss('remove',selectLabel,'cssObligatoire') ; 00674 } 00675 } 00676 } 00677 00684 function clickChkDesact(Objet) 00685 { 00686 var selectObjet, selectLabel ; 00687 var listeObj=Objet.listeObj.split(' ') ; 00688 var j, jmax=listeObj.length ; 00689 00690 if(!Objet.checked) 00691 { 00692 for(j=1; j<jmax; j++) 00693 { 00694 selectObjet=document.getElementById(listeObj[j]) ; 00695 selectObjet.disabled=false; 00696 } 00697 } 00698 else 00699 { 00700 for(j=1; j<jmax;j++) 00701 { 00702 selectObjet=document.getElementById(listeObj[j]) ; 00703 selectObjet.disabled=true; 00704 } 00705 } 00706 } 00707 00713 function clickChkSelectAll(Objet) 00714 { 00715 var selectObjet, selectLabel ; 00716 var listeObj=Objet.listeObj.split(' ') ; 00717 var j, jmax=listeObj.length ; 00718 00719 if(!Objet.checked) 00720 { 00721 for(j=1; j<jmax; j++) 00722 { 00723 selectObjet=document.getElementById(listeObj[j]) ; 00724 selectObjet.checked=false; 00725 } 00726 } 00727 else 00728 { 00729 for(j=1; j<jmax;j++) 00730 { 00731 selectObjet=document.getElementById(listeObj[j]) ; 00732 selectObjet.checked=true; 00733 } 00734 } 00735 } 00736 00745 function clickChkCopie(Objet, chaineListeObj) 00746 { 00747 var selectObjet ; 00748 var listeObj=Objet.listeObj.split(' ') ; 00749 var j, jmax=listeObj.length ; 00750 00751 if(Objet.checked) 00752 { 00753 for(j=2; j<jmax; j+=2) 00754 { 00755 Source=document.getElementById(listeObj[j]) ; 00756 Destination=document.getElementById(listeObj[j-1]) ; 00757 if(Source.textInfo) 00758 if(Source.value!=Source.textInfo) Destination.value=Source.value ; else Destination.value=""; 00759 else 00760 Destination.value=Source.value ; 00761 } 00762 for(j=1; j<jmax; j+=2) 00763 { 00764 selectObjet=document.getElementById(listeObj[j]) ; 00765 selectObjet.readOnly=true; 00766 nettoieObjet(selectObjet); 00767 jscss("add",selectObjet,"cssReadOnly") ; 00768 } 00769 } 00770 else 00771 { 00772 for(j=1; j<jmax; j+=2) 00773 { 00774 selectObjet=document.getElementById(listeObj[j]) ; 00775 selectObjet.readOnly=false; 00776 jscss("remove",selectObjet,"cssReadOnly") ; 00777 } 00778 } 00779 } 00780 00787 function copieValeur(Source) 00788 { 00789 var ChkBox=document.getElementById(Source.chkBox); 00790 var Destination ; 00791 00792 if(ChkBox.checked) 00793 { 00794 Destination=document.getElementById(Source.destination); 00795 if(Source.textInfo) 00796 if(Source.value!=Source.textInfo) Destination.value=Source.value ; else Destination.value=""; 00797 else 00798 Destination.value=Source.value ; 00799 } 00800 } 00801 00807 function egalRef(Objet) 00808 { 00809 var selectObjet ; 00810 var listeObj=Objet.listeObj.split(' ') ; 00811 var j, jmax=listeObj.length ; 00812 00813 if(Objet.value) 00814 { 00815 for(j=1; j<jmax; j++) 00816 { 00817 selectObjet=document.getElementById(listeObj[j]) ; 00818 selectObjet.readOnly=false; 00819 jscss("remove",selectObjet,"cssReadOnly") ; 00820 if(selectObjet.value!="") 00821 { 00822 nettoieObjet(selectObjet); 00823 egalVerif(selectObjet) ; 00824 } 00825 } 00826 } 00827 else 00828 { 00829 for(j=1; j<jmax; j++) 00830 { 00831 selectObjet=document.getElementById(listeObj[j]) ; 00832 selectObjet.readOnly=true; 00833 jscss("add",selectObjet,"cssReadOnly") ; 00834 selectObjet.value="" ; 00835 } 00836 } 00837 } 00838 00844 function egalVerif(Objet) 00845 { 00846 var erreur=0 ; 00847 var Ref=document.getElementById(Objet.reference); 00848 if(!Ref) 00849 { 00850 messErr="▲ Erreur : l'objet de référence n'a pas été trouvé." ; 00851 erreur=actualiseObjet(Objet,Objet.value," ",/^$/,messErr) ; 00852 } 00853 else if(Objet.value!=Ref.value && !Objet.disabled && !Ref.disabled) 00854 // Si Objet ou Ref est inhibé alors le test n'est pas effectué... 00855 { 00856 messErr="▲ Ce champ n'est pas identique à son champ de référence." ; 00857 erreur=actualiseObjet(Objet,Objet.value," ",/^$/,messErr) ; 00858 } 00859 return erreur ; 00860 } 00861 00869 function verif_date(Objet) 00870 { 00871 var expReg, messErr, misEnForme ; 00872 var date ; // tableau de 4 chaines - les 3 dernières : [1]année/[2]mois/[3]jour 00873 var varTime ; // variable de type Date 00874 var erreur=0 ; 00875 00876 if(Objet.value && !Objet.disabled) 00877 // Si Objet est inhibé alors le test n'est pas effectué... 00878 { 00879 misEnForme=jsTrim(Objet.value.replace(/\//g,'-')) ; 00880 if(!(date=/(\d{4})\-(\d{1,2})\-(\d{1,2})/.exec(misEnForme)))// La date était au format YYYY-MM-DD 00881 { 00882 if((date=/(\d{1,2})\-(\d{1,2})\-(\d{1,4})/.exec(misEnForme)) != null) 00883 { // La date était au format DD-MM-YY ou DD-MM-YYYY 00884 var temp=date[1] ; 00885 date[1]=date[3] ; 00886 date[3]=temp ; 00887 if (date[1]<10) date[1]='200'+date[1] ; 00888 else if (date[1]<40) date[1]='20'+date[1] ; 00889 } 00890 } 00891 if(date) varTime=new Date(date[1],date[2]-1,date[3]) ; 00892 misEnForme=varTime?formatDate(varTime,"dd/MM/yyyy"):"" ; // formatDate est une fonction de CalendarPopup.js 00893 expReg=/^\d{2}\/\d{2}\/\d{4}$/ ; 00894 messErr="▲ Cette date n'est pas valide. Formats autorisés : 2010-08-23, 23/08/2010." ; 00895 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 00896 } 00897 return erreur ; 00898 } 00899 00907 function verif_tel(Objet) 00908 { 00909 var expReg, messErr, misEnForme ; 00910 var erreur=0 ; 00911 if(Objet.value && !Objet.disabled) 00912 // Si Objet est inhibé alors le test n'est pas effectué... 00913 { 00914 expReg=/^0\d\.\d{2}\.\d{2}\.\d{2}\.\d{2}$/ ; 00915 if(!expReg.test(Objet.value)) 00916 { 00917 misEnForme=Objet.value.replace(/[^0-9]/g,'').replace(/^0?([1-9])(\d{2})(\d{2})(\d{2})(\d{2})$/,'0$1.$2.$3.$4.$5') ; 00918 messErr="▲ Ce numéro n'est pas valide, il doit être constitué de 10 chiffres et débuter par 0." ; 00919 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 00920 } 00921 } 00922 return erreur; 00923 } 00924 00932 function verif_courriel(Objet) 00933 { 00934 var expReg, messErr, misEnForme ; 00935 var erreur=0 ; 00936 if(Objet.value && !Objet.disabled) 00937 // Si Objet est inhibé alors le test n'est pas effectué... 00938 { 00939 expReg=/^[a-z0-9_.-]+@[a-z0-9_.-]+\.[a-z]{2,6}$/ ; 00940 if(!expReg.test(Objet.value)) 00941 { 00942 misEnForme=jsTrim(Objet.value.toLowerCase()) ; 00943 messErr="▲ Cette adresse (messagerie électronique) n'est pas valide." ; 00944 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 00945 } 00946 } 00947 return erreur; 00948 } 00949 00957 function verif_url(Objet) 00958 { 00959 var expReg, messErr, misEnForme ; 00960 var erreur=0 ; 00961 if(Objet.value && !Objet.disabled) 00962 // Si Objet est inhibé alors le test n'est pas effectué... 00963 { 00964 //expReg=/^https?:\/\/((\d+\.\d+\.\d+\.\d+)|(([a-z0-9_-]+\.)+([a-z][a-z0-9_-]*)))\/?$/ ; 00965 //expReg=/^http(s)?:\/\/([a-zA-Z0-9-_]+.){0,4}[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}(:[0-9]+)?(\/[a-zA-Z0-9-]*\/?|\/[a-zA-Z0-9]+\.[a-zA-Z0-9]{1,4})?$/ ; 00966 expReg=/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/ ; 00967 if(!expReg.test(Objet.value)) 00968 { 00969 misEnForme=jsTrim(Objet.value.toLowerCase()) ; 00970 messErr="▲ Cette adresse de site Web n'est pas valide (ne pas oublier le préfixe http:// !)." ; 00971 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 00972 } 00973 } 00974 return erreur; 00975 } 00976 00984 function verif_login(Objet) 00985 { 00986 var expReg, messErr, misEnForme ; 00987 var erreur=0 ; 00988 if(Objet.value && !Objet.disabled) 00989 // Si Objet est inhibé alors le test n'est pas effectué... 00990 { 00991 expReg=/^[\w.-]+$/ ; 00992 if(!expReg.test(Objet.value)) 00993 { 00994 misEnForme=Objet.value.replace(/[éèëê]/g,'e'); 00995 misEnForme=misEnForme.replace(/[àäâ@]/g,'a'); 00996 misEnForme=misEnForme.replace(/[ïî]/g,'i'); 00997 misEnForme=misEnForme.replace(/[öô]/g,'o'); 00998 misEnForme=misEnForme.replace(/[ùûüµ]/g,'u'); 00999 misEnForme=misEnForme.replace(/[ç]/g,'c'); 01000 //misEnForme=misEnForme.replace(/[ ]/g,'_'); 01001 misEnForme=misEnForme.replace(/[^\w.-]/g, '') ;// ne conserver que les caractères autorisés 01002 messErr="▲ Ce login n'est pas valide, il ne doit être constitué que de lettres non accentuées, de chiffres ou des signes '-', '_' et '.'." ; 01003 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 01004 } 01005 } 01006 return erreur; 01007 } 01008 01016 function verif_codePostal(Objet) 01017 { 01018 var expReg, messErr, misEnForme ; 01019 var erreur=0 ; 01020 if(Objet.value && !Objet.disabled) 01021 // Si Objet est inhibé alors le test n'est pas effectué... 01022 { 01023 expReg=/^(\d{2})(\d{3})?$/ ;// 2 ou 5 chiffres ! 01024 if(!expReg.test(Objet.value)) 01025 { 01026 misEnForme=Objet.value.replace(/[^0-9]/g, '') ; // ne conserver que les chiffres 01027 messErr="▲ Ce code postal n'est pas valide, il doit être constitué de 2 ou 5 chiffres." ; 01028 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 01029 } 01030 } 01031 return erreur; 01032 } 01033 01041 function verif_APE(Objet) 01042 { 01043 var expReg, messErr, misEnForme ; 01044 var erreur=0 ; 01045 if(Objet.value && !Objet.disabled) 01046 // Si Objet est inhibé alors le test n'est pas effectué... 01047 { 01048 expReg=/^\d{4}[A-Z]$/ ;// code de 4 chiffres suivis d'une lettre majuscule 01049 if(!expReg.test(Objet.value)) 01050 { 01051 misEnForme=jsTrim(Objet.value.toUpperCase()) ; 01052 messErr="▲ Ce code APE n'est pas valide, il doit être constitué de de 4 chiffres suivis d'une lettre." ; 01053 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 01054 } 01055 } 01056 return erreur; 01057 } 01058 01066 function verif_SIRET(Objet) 01067 { 01068 var expReg, messErr, misEnForme ; 01069 var erreur=0 ; 01070 if(Objet.value && !Objet.disabled) 01071 // Si Objet est inhibé alors le test n'est pas effectué... 01072 { 01073 expReg=/^(\d{3})-(\d{3})-(\d{3})( \d{5})?$/ ; 01074 if(!expReg.test(Objet.value)) 01075 { 01076 misEnForme=jsTrim(Objet.value.replace(/[^0-9]/g,'').replace(/^(\d{3})(\d{3})(\d{3})(\d{5})?$/,'$1-$2-$3 $4')) ; 01077 messErr="▲ Ce code n'est pas valide, il doit être constitué de 14 chiffres. A défaut, le code SIREN, constitué de 9 chiffres peut être accepté." ; 01078 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 01079 } 01080 } 01081 return erreur; 01082 } 01083 01091 function verif_NIRPP(Objet) // numéro sécu. 01092 { 01093 var expReg, messErr, misEnForme ; 01094 var erreur=0 ; 01095 if(Objet.value && !Objet.disabled) 01096 // Si Objet est inhibé alors le test n'est pas effectué... 01097 { 01098 expReg=/^\d.(\d{2}).(\d{2}).(\d{2}).(\d{3}).(\d{3}) \((\d{2})\)$/ ; 01099 if(!expReg.test(Objet.value)) 01100 { 01101 misEnForme=Objet.value.replace(/[^0-9]/g,'').replace(/^(\d{1})(\d{2})(\d{2})(\d{2})(\d{3})(\d{3})(\d{2})$/,'$1.$2.$3.$4.$5.$6 ($7)') ; 01102 messErr="▲ Ce numéro n'est pas valide, il doit être constitué de 15 chiffres." ; 01103 erreur=actualiseObjet(Objet,Objet.value,misEnForme,expReg,messErr) ; 01104 } 01105 } 01106 return erreur; 01107 } 01108 01109 /* ***************************** Window.onLoad ***************************** */ 01113 if(document.getElementById && document.createTextNode) 01114 { 01115 addLoadEvent(chargementVerifForm); 01116 }