Comment modifier tous les href d'une page sans les modifier...

Comment modifier tous les href d'une page sans les modifier... - HTML/CSS - Programmation

Marsh Posté le 19-04-2006 à 00:43:50    

Voilà, je suis en train de développer une petite application PHP.
Seulement voilà, il arrive que le temps de génération soit supérieur à 0.8 secondes.
J'ai donc fait un joli petit div invisible avec un joli message "patientez S.V.P." avec un joli sablier qui s'anime tout ça, fantastique, on dirait du Star Wars... euh, scusez, je m'emporte.
 
Bon bref, dans mes href, je rajoute un onclick="affwait"
 
Ma fonction affwait :

Code :
  1. function affwait() {
  2.  setTimeout('affpatienteexec()',800);
  3. }
  4. function affpatienteexec() {
  5.  document.getElementById('patientediv').style.display="block";
  6. }


 
Rien de bien méchant, en plus, ça marche impeccable, la plupart du temps, le message ne s'affiche pas car les pages s'affichent plus vite que 800ms.
 
Cela dit, mon problème, c'est que ça m'oblige à modifier tous mes href à la main pour rajouter mon onclick hors, il doit y avoir un moyen de déclencher un script qui me le ferait tout seul en début de page.
 
Mon problème, bah c'est que je ne connais pas ce moyen. :D
 
Si quelqu'un pouvait m'aiguiller (j'accepte même les RTFM si ils sont en français). :D  
 
Merci d'avance. :jap:


Message édité par The-Shadow le 19-04-2006 à 00:47:47
Reply

Marsh Posté le 19-04-2006 à 00:43:50   

Reply

Marsh Posté le 19-04-2006 à 01:37:30    

tu peut obtenir une liste des liens dans ta page à l'aide de ``document.links``.

Reply

Marsh Posté le 19-04-2006 à 09:57:24    

Dans ton cas le plus simple est de faire l'appel sur le "unload".
Il te suffit de rajouter un onunload sur ton body avec l'appel de ta fonction et on en parle plus :)
 

nargy a écrit :

tu peut obtenir une liste des liens dans ta page à l'aide de ``document.links``.


mouais... La tendance est plutot à l'utilisation du DOM donc autant utiliser document.getElementsByTagName('a') qui te retourne une DOMNodeList

Reply

Marsh Posté le 19-04-2006 à 10:11:10    

anapajari a écrit :

mouais... La tendance est plutot à l'utilisation du DOM donc autant utiliser document.getElementsByTagName('a') qui te retourne une DOMNodeList


Pourrais tu me mettres sur la voie de comment exploiter ce retour.
En attendant ou si tu ne répondais pas, je cherche sur Google, mais bon, j'suis pas un boss en js.

Reply

Marsh Posté le 19-04-2006 à 10:19:06    

nan mais là t'as pas besoin du getElementsByTagName ... :o
tu changes juste ta balise body:

Code :
  1. <body ... onunload="affwait()">
  2. ...
  3. </body>


et c'est fini [:spamafote]

Reply

Marsh Posté le 19-04-2006 à 10:30:25    

document.links, c'est
document.getElementsByTagName('a')
et document.getElementsByTagName('area')

Reply

Marsh Posté le 19-04-2006 à 10:42:03    

anapajari a écrit :

nan mais là t'as pas besoin du getElementsByTagName ... :o
tu changes juste ta balise body:

Code :
  1. <body ... onunload="affwait()">
  2. ...
  3. </body>


et c'est fini [:spamafote]


ça ne fonctionne pas. :'(
J'ai tenté de rajouter un alert avant l'affichage, apparemment, la fonction onunload s'exécute juste avant le réaffichage de l'autre page, pas dès l'instant où on cliques pour quitter la page. :/

Reply

Marsh Posté le 19-04-2006 à 11:05:40    

Code :
  1. <script language="JavaScript" type="text/javascript">
  2.     <!--
  3.     function modif_liens()
  4.     {
  5.      for(i=0;i<documents.links.length;i++)
  6.        document.links[i].onclick='return affwait()';
  7.      for(i=0;i<documents.forms.length;i++)
  8.        document.forms[i].onsubmit='return affwait()';
  9.     }
  10.     document.onload='modif_liens()';
  11.     -->
  12.     </script>


PS: affwait() retourne true.

Message cité 1 fois
Message édité par nargy le 19-04-2006 à 11:06:38
Reply

Marsh Posté le 19-04-2006 à 11:16:28    

The-Shadow a écrit :

ça ne fonctionne pas. :'(
J'ai tenté de rajouter un alert avant l'affichage, apparemment, la fonction onunload s'exécute juste avant le réaffichage de l'autre page, pas dès l'instant où on cliques pour quitter la page. :/


Oui, excuse moi :)
Dans ton cas précis c'était "onbeforeunload" dont tu avais besoin, le unload est effectivement trop tard...
 

Code :
  1. <body ... onbeforeunload="affwait()">
  2. ...
  3. </body>


 
 

Reply

Marsh Posté le 19-04-2006 à 11:33:52    

onbeforeunload ne fonctionne pas comme tu le décrit avec FF.
il s'active quand je ferme la page, pas quand je clique.
errata: je clique mal.

Message cité 2 fois
Message édité par nargy le 19-04-2006 à 11:36:03
Reply

Marsh Posté le 19-04-2006 à 11:33:52   

Reply

Marsh Posté le 19-04-2006 à 11:36:46    

nargy a écrit :

onbeforeunload ne fonctionne pas comme tu le décrit avec FF.
il s'active quand je ferme la page, pas quand je cliques.


 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Test</title>
  7.   <script type="text/javascript">
  8.   function test(){
  9.     alert('pouet');
  10.   }
  11.   </script>
  12.   <style type="text/css"></style>
  13. </head>
  14. <body onbeforeunload='return test()'>
  15. <a href="http://www.google.com">google</a>
  16. </body>
  17. </html>


;)
 
Tu peux même t'amuser à mettre des return false ( mais FF affice un confirm pour valider que tu souhaites bien rester sur la page)

Reply

Marsh Posté le 19-04-2006 à 11:41:27    

ouais, désolé je me suis fait abusé par un site que j'ai trouvé au pif sur le net.
je ne connaissai pas onbeforeunload, je voulais tester. il n'est pas renseigné par w3c.

Reply

Marsh Posté le 19-04-2006 à 11:42:51    

nargy a écrit :

onbeforeunload ne fonctionne pas comme tu le décrit avec FF.
il s'active quand je ferme la page, pas quand je clique.
errata: je clique mal.


Ca marchait bien, mais ça m'empêche de valider mon site, du coup si j'ai pas le petit icone vert en bas de Firefox, je me dis à chaque fois qu'il y a une merde dans la compo de ma page. :D
 

nargy a écrit :

Code :
  1. <script language="JavaScript" type="text/javascript">
  2.     <!--
  3.     function modif_liens()
  4.     {
  5.      for(i=0;i<documents.links.length;i++)
  6.        document.links[i].onclick='return affwait()';
  7.      for(i=0;i<documents.forms.length;i++)
  8.        document.forms[i].onsubmit='return affwait()';
  9.     }
  10.     document.onload='modif_liens()';
  11.     -->
  12.     </script>


PS: affwait() retourne true.


ça marche pas, j'ai bien corrigé les s que tu avais dut rajouté pour me piéger petit canaillou :D, mais il ne se passe rien. Pourtant, j'ai bien essayé de piger pour pas faire un bête copier/coller, ça m'avait l'air logique.  [:at war with emo]


Message édité par The-Shadow le 19-04-2006 à 11:44:06
Reply

Marsh Posté le 19-04-2006 à 11:48:46    

Bon vous embêtez pas plus, je vais utiliser "onbeforeunload ", par contre, je note quand même la solution de Nargy, à étudier.

Reply

Marsh Posté le 19-04-2006 à 11:54:35    

nargy a écrit :

ouais, désolé je me suis fait abusé par un site que j'ai trouvé au pif sur le net.
je ne connaissai pas onbeforeunload, je voulais tester. il n'est pas renseigné par w3c.


Non c'est vrai, il ne fait pas parti des evenements "standards"... A la base c'était du IE pur mais FF l'a implémenté aussi depuis quelques temps ( ce qui est logique vu que c'est quand même pratique, comme ils avaient déjà fait pour innerHTML)
 

Reply

Marsh Posté le 19-04-2006 à 12:08:55    

Fonctionne aussi sous Safari mais pas sous Opera 8.54

Reply

Marsh Posté le 19-04-2006 à 12:42:40    

Cette fois ça fonctionne:

Code :
  1. <script language="JavaScript" type="text/javascript">
  2. <!--
  3. function affwait()
  4. {
  5.   alert('bye');
  6.   return true;
  7. }
  8. function modif_liens()
  9. {
  10.   var i=document.links.length;
  11.   while (i--) document.links[i].onclick=affwait;
  12.   i=document.forms.length;
  13.   while (i--) document.forms[i].onsubmit=affwait;
  14. }
  15. window.onload=modif_liens;
  16. -->
  17. </script>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed