Faire 1 recherche sur 1 frame dans 1 autre frame [Résolu, code déposé]

Faire 1 recherche sur 1 frame dans 1 autre frame [Résolu, code déposé] - HTML/CSS - Programmation

Marsh Posté le 06-10-2003 à 15:21:54    

Bonjour à tous,
 
J'explique mon sujet: j'ai une page html (globale) qui se découpe en deux frames en ligne (j'ai besoin de voir toujours afficher des ancres et une zone de recherche). Dans la page html globale, je mets le script suivant trouvé sur le net et qui me sert de recherche :

Code :
  1. <script language=JavaScript>
  2. <!--
  3. /* Find In Page Script- By Mike Hall (MHall75819@aol.com) */
  4. /* Recherche de mot */
  5. var NS4 = (document.layers);    // Which browser?
  6. var IE4 = (document.all);
  7. var win = parent.bas ;    // window to search.
  8. var n   = 0;
  9. function findInPage(str) {
  10. var txt, i, found;
  11. if (str == "" )
  12. return false;
  13. // Find next occurance of the given string on the page, wrap around to the
  14. // start of the page if necessary.
  15. if (NS4) {
  16. // Look for match starting at the current point. If not found, rewind
  17. // back to the first match.
  18. if (!win.find(str))
  19. while(win.find(str, false, true))
  20. n++;
  21. else
  22. n++;
  23. // If not found in either direction, give message.
  24. if (n == 0)
  25. alert("Je suis navré, je n'ai rien trouvé. Vérifiez l'orthographe." );
  26. }
  27. if (IE4) {
  28. txt = win.document.body.createTextRange();
  29. // Find the nth match from the top of the page.
  30. for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
  31. txt.moveStart("character", 1);
  32. txt.moveEnd("textedit" );
  33. }
  34. // If found, mark it and scroll it into view.
  35. if (found) {
  36. txt.moveStart("character", -1);
  37. txt.findText(str);
  38. txt.select();
  39. txt.scrollIntoView();
  40.   n++;
  41.   }
  42. // Otherwise, start over at the top of the page and find first match.
  43. else {
  44. if (n > 0) {
  45. n = 0;
  46. findInPage(str);
  47. }
  48. // Not found anywhere, give message.
  49. else
  50. alert("Je suis navré, je n'ai rien trouvé. Vérifiez l'orthographe." );
  51. }
  52. }
  53. return false;
  54. }
  55. // -->
  56. </script>


Dans ma frame du bas, j'ai un texte dans lequel je voudrais faire ma recherche.
Dans la frame du haut, je mets le code suivant servant de zone de recherche:

Code :
  1. <FORM name="search" onsubmit="return findInPage(this.string.value);">
  2. <INPUT name="string" onchange="n = 0;" size="18">
  3. <INPUT type="submit" value="Rechercher"></FORM>


 
Je pense que ma déclaration de variable "var win = parent.bas ;" n'est pas bonne, j'ai cherché et essayé diverses écritures sans succès du style windows.parent.bas, frames['bas'], frames[1]...
 
Est-ce que quelqu'un connaîtrait l'écriture de ma variable qui marcherait avec mon code ?
 
 :jap:  Merci de vos réponses.  :jap:


Message édité par Manu la Science le 08-10-2003 à 17:43:20

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 06-10-2003 à 15:21:54   

Reply

Marsh Posté le 06-10-2003 à 16:42:32    

Il y aurait également un autre moyen, ce serait d'afficher en permanence la zone de recherche qui serait alors sur la même page, et là le script marche... Mais je ne sais pas comment forcer l'affichage d'un morceau de page autrement qu'avec les frames...
 
Voilà pour le complément d'infos.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 08-10-2003 à 17:26:20    

Salut à tous,
 
Voici une réponse à ma question et même plus...

Code :
  1. <script language="JavaScript">
  2. function rechercher (mot)
  3. {
  4. mydoc = parent.maframe.document;
  5. myanchor = mydoc.getElementById(mot);
  6. if (myanchor) {
  7.  myurl = mydoc.location.href;
  8.  myurllength = myurl.indexOf ("#" );
  9.  if (myurllength > 0) {
  10.   newurl = myurl.substring (0, myurllength)+"#"+mot;
  11.  } else {
  12.   newurl = myurl+"#"+mot;
  13.  }
  14.  mydoc.location.href = newurl;
  15. }
  16. }
  17. function cibler (mot)
  18. {
  19. mydoc = parent.maframe.document;
  20. anchornum = 0;
  21. do {
  22.  thisanchor = mydoc.anchors[anchornum].name;
  23.  if (thisanchor.substr(0, mot.length) == mot) {
  24.   anchornum = mydoc.anchors.length;
  25.   myurl = mydoc.location.href;
  26.   myurllength = myurl.indexOf ("#" );
  27.   if (myurllength > 0) {
  28.    newurl = myurl.substring (0, myurllength)+"#"+thisanchor;
  29.   } else {
  30.    newurl = myurl+"#"+thisanchor;
  31.   }
  32.   mydoc.location.href = newurl;
  33.  }
  34.  anchornum += 1;
  35. }
  36. while (anchornum <= mydoc.anchors.length)
  37. }
  38. </script>


La première fonction permettant de rechercher le mot parmi des ancres nommées et la seconde permettant de rechercher au fur et à mesure de la saisie du mot.
 
Avec le formulaire suivant:

Code :
  1. <form name="form1" method="post" action="">
  2.   <input type="text" name="textfield" onKeyUp="cibler (document.form1.textfield.value);">
  3.   <input type="submit" name="Submit" value="Envoyer" onclick="rechercher (document.form1.textfield.value);">
  4. </form>


 
le tout permet d'avoir une frame en haut (par exemple) qui est une zone de recherche des mots qui se trouvent dans la frame en bas (par exemple). La recherche des mots se fait au fur et à mesure de leur saisie en sachant que la recherche ne se fait que parmi les ancres de la frame du bas...
 
Bonne fin de journée à tous.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Sujets relatifs:

Leave a Replay

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