webForumDet fria alternativet

Drop-down menystrul - stannar nere vid funktionsanrop?

PHP

7 svar · 425 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Jag håller på att försöka skapa en vettig drop-down meny. Eftersom detta funkar mindre bra har jag diverse testfiler för att försöka hitta felet. Eftersom filen innehåller både PHP, HTML, CSS och Javascript vet jag inte riktigt var jag borde posta om problemet, men det uppstår dock när jag försöker skriva ut HTML, CSS och Javascript via en funktion i PHP, varför jag valde detta forum.

Jag har en testfil:
http://www.tydal.nu/aasah/Lab/fishTryIncl.php
Den inkluderar en menyfil, fishTrySec.php och blir hur tjusig som helst. Länkarna går ingenstans, men själva menyn bär sig civiliserat åt.

Men, när jag ska anpassa menyn till min verkliga sida, vill jag kunna ändra innehåll/utseende baserat på vissa variabler. (Val av topbanner, val av CSS-fil, osv.) Följdaktligen vill jag skriva ut även själva header-delen via en funktion, inte som statisk HTML. Så, då konstruerar jag en testfil som skriver ut samma meny, samma Javascriptkod och samma HTML, MEN via ett funktionsanrop med variabler - och plötsligt funkar ingenting!!! :o :q

I min nya testfil:
http://www.tydal.nu/aasah/Lab/fishTryIncl3.php
stannar rullgardinsmenyerna nere!!! Om man en gång lockat fram dem, så fortsätter de att synas vare sig man håller kvar musen eller ej???? Hur ända in i glödheta ... är det möjligt? VARFÖR? (Åtminstone i IE v 5.50.) Kan det vara så att det beror på vilken webbläsare man har? Hur löser man det? Lite kod...

//fishTry3.php - knäpp
<?php
session_start();
$url = "http://...";
$servPath = "/home/aasah/www/";

//Ska endast anropas från printHeader
function printMenu() {
  //Identisk med andra filen
}

//Anropas från fishTryIncl3.php
function printHeader($title = "", $google = "", $css = "fishMerge.css") {

   global $url, $servPath;

   if ($title != "") $title = "<title> [T&amp;T] $title </title>";
   else $title = "<title> [T&amp;T] </title>";
   //Lägg till stopp för sökmotorer
   if ($google != "hittaOK") 
      $googleInfo = "<meta name=\"robots\" content=\"noindex\">";
   else $googleInfo = "";
   $href = "href=\"$css\"";

$head = <<< EOHEADSTART
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  $google
  $title
  <link $href rel="stylesheet" type="text/css">
EOHEADSTART;

$js = <<< EOJSCRIPT
<script type="text/javascript">
// identiskt med den andra filen
</script>
EOJSCRIPT;

  echo "$head";
  echo "$js";
  echo "</head>
        <body>";
  printMenu();
}

?>
//fishTrySec.php - fungerar
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <meta name="robots" content="noindex">
  <title>Just a simple test</title>
  <link href="fishMerge.css" rel="stylesheet" type="text/css">

<script type="text/javascript">
sfHover = function() {
  var sfEls = document.getElementById("nav").getElementsByTagName("LI");
    for (var i=0; i<sfEls.length; i++) {
      sfEls[i].onmouseover=function() {
        this.className+=" sfhover";
      }
      sfEls[i].onmouseout=function() {
        this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
      }
    }
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

</script>

</head>
<body>
<?php

//Anropas från fishTryIncl.php
function printMenu() {
//...
}
?>
Medlem sedan juni 20006 031 inlägg
#2

Hinner inte kolla igenom koden nu, men i Firefox så funkar det som det ska.

Medlem sedan mars 20034 471 inlägg
#3

Pedda skrev:

Hinner inte kolla igenom koden nu, men i Firefox så funkar det som det ska.

Jaha, då är det alltså ett problem för IE. Suck! Eftersom drygt 70% av mina besökare, plus jag, kör IE så måste det funka med denna usla browser...

Om någon vänlig människa har tid att försöka se var filerna skiljer sig åt skulle jag bli jättetacksam, efter helgen om inte annat.

Jag sammanställde hur källan för de två filerna ser ut, nån som ser någon skillnad?

//Strulfilen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  
  <title> [T&amp;T] </title>
  <link href="fishMerge.css" rel="stylesheet" type="text/css">

			<script language='javascript' src='http://127.0.0.1:1029/js.cgi?ca&r=26962'></script>

<script type="text/javascript">
sfHover = function() {
        var sfEls = document.getElementById("nav").getElementsByTagName("LI");
        for (var i=0; i<sfEls.length; i++) {
                sfEls[i].onmouseover=function() {
                        this.className+=" sfhover";
                }
                sfEls[i].onmouseout=function() {
                        this.className=this.className.replace(new RegExp(" sfhover\b"), "");
                }
        }
}
if (window.attachEvent) window.attachEvent("onload", sfHover);
</script></head>
        <body><ul id="nav" class="medium">
        <li><a class="menu " href="#">Home</a>
        </li>
        <li><a class="menu" href="#">News/Info</a>
                <ul class="sub">
                        <li><a class="submenu" href="#">News</a></li>
                        <li><a class="submenu" href="#">FAQ</a></li>
                        <li><a class="submenu" href="#">Terms&nbsp;of&nbsp;Use</a></li>
                        <li><a class="submenu" href="#">Policies</a></li>
                        <li><a class="submenu" href="#">Site&nbsp;Map</a></li>
                        <li><a class="submenu" href="#">About</a></li>
                </ul>
         </li>
        <li><a class="menu" href="#">Puzzles</a>
                <ul class="sub">
                        <li><a class="submenu" href="#">Quizzes</a></li>
                        <li><a class="submenu" href="#">Crosswords</a></li>
                        <li><a class="submenu" href="#">JigSaw</a></li>
                        <li><a class="submenu" href="#">Logic</a></li>
                </ul>
        </li>
        <li><a class="menu" href="#">Members</a>
                <ul class="sub">
                        <li><a class="submenu" href="#">Member&nbsp;list</a></li>
                </ul>
        </li>
        <li><a class="menu" href="#">Login/Reg</a>
                    <ul class="sub">
                        <li><a class="submenu" href="#">Login</a></li>
                        <li><a class="submenu" href="#">Register</a></li>
                    </ul>
                </li>
        <li><a class="menu" href="#">Guestbook</a>
             </li>
        <li><a class="menu " href="#">Links</a>
        </li>
        

</ul><BR>
        <BR><H1>Trying out new T&amp;T Menu </H1>
//Den som fungerar
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <meta name="robots" content="noindex">
  <title>Just a simple test</title>
  <link href="fishMerge.css" rel="stylesheet" type="text/css">

			<script language='javascript' src='http://127.0.0.1:1029/js.cgi?ca&r=11478'></script>

<script type="text/javascript">
sfHover = function() {
        var sfEls = document.getElementById("nav").getElementsByTagName("LI");
        for (var i=0; i<sfEls.length; i++) {
                sfEls[i].onmouseover=function() {
                        this.className+=" sfhover";
                }
                sfEls[i].onmouseout=function() {
                        this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
                }
        }
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

</script>

</head>
<body>

<ul id="nav" class="medium">
        <li><a class="menu " href="#">Home</a>
        </li>
        <li><a class="menu" href="#">News/Info</a>
                <ul class="sub">
                        <li><a class="submenu" href="#">News</a></li>
                        <li><a class="submenu" href="#">FAQ</a></li>
                        <li><a class="submenu" href="#">Terms&nbsp;of&nbsp;Use</a></li>
                        <li><a class="submenu" href="#">Policies</a></li>
                        <li><a class="submenu" href="#">Site&nbsp;Map</a></li>
                        <li><a class="submenu" href="#">About</a></li>
                </ul>
         </li>
        <li><a class="menu" href="#">Puzzles</a>
                <ul class="sub">
                        <li><a class="submenu" href="#">Quizzes</a></li>
                        <li><a class="submenu" href="#">Crosswords</a></li>
                        <li><a class="submenu" href="#">JigSaw</a></li>
                        <li><a class="submenu" href="#">Logic</a></li>
                </ul>
        </li>
        <li><a class="menu" href="#">Members</a>
                <ul class="sub">
                        <li><a class="submenu" href="#">Member&nbsp;list</a></li>
                </ul>
        </li>
        <li><a class="menu" href="#">Login/Reg</a>
                    <ul class="sub">
                        <li><a class="submenu" href="#">Login</a></li>
                        <li><a class="submenu" href="#">Register</a></li>
                    </ul>
                </li>
        <li><a class="menu" href="#">Guestbook</a>
             </li>
        <li><a class="menu " href="#">Links</a>
        </li>
        

</ul><BR>
        <BR><H1>Trying out new T&amp;T Menu </H1>

Bifogar också hur strulfilen ser ut för mig.

screencapie550.jpg
Medlem sedan jan. 2003296 inlägg
#4

En backslash har fallit bort från ditt reguljära uttryck i onmouseout-delen av funktionen sfHover i den felaktiga versionen. Det bör väl vara två stycken backslash mellan " sfHover" och "b" i new RegExp(...)?

Medlem sedan mars 20034 471 inlägg
#5

jawbreaker skrev:

En backslash har fallit bort från ditt reguljära uttryck i onmouseout-delen av funktionen sfHover i den felaktiga versionen. Det bör väl vara två stycken backslash mellan " sfHover" och "b" i new RegExp(...)?

JA! :birp Det förklarar saken! Det är PHP som "käkar upp" det. Hur många backslash behövs för att två ska komma ut? Tre eller fyra?

$js = <<< EOJSCRIPT
<script type="text/javascript">
....
this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
....
</script>
EOJSCRIPT;
Medlem sedan jan. 2003296 inlägg
#6

Då ska du nog klämma till med fyra stycken :)

Medlem sedan mars 20034 471 inlägg
#7

Tusen miljoner tack! Jag har brottats med detta i ca en vecka! :birp :e :D

Medlem sedan jan. 2003296 inlägg
#8

Varsågod :birp

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)