webForumDet fria alternativet

Hjälp med Rollover-funktion

13 svar · 536 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 597 inlägg
#1

Vet inte vad jag ska göra...Har suttit och gjort iordning en meny i PS7 och ska implementera den med ett sketet litet javascript! Tror ni inte det skiter sig iaf :bla I FF ser det bra ut som vanligt (så när som på ett mystiskt vitt streck högst upp ovanför headerbilden, vad kan det vara?) I IE ser det ut som skit (som vanligt) om jag får använda det uttrycket! Misstänker att sidan hamnar till vänster pga av något som inte IE gillar i rollover-skriptet jag använder för menyn.

Så här ser skriptet ut:

/*
	Standards Compliant Rollover Script
	Author : Daniel Nolan
	[url]http://www.bleedingego.co.uk/webdev.php[/url]
*/

function initRollovers() {
	if (!document.getElementById) return
	
	var aPreLoad = new Array();
	var sTempSrc;
	var aImages = document.getElementsByTagName('img');

	for (var i = 0; i < aImages.length; i++) {		
		if (aImages[i].className == 'imgover') {
			var src = aImages[i].getAttribute('src');
			var ftype = src.substring(src.lastIndexOf('.'), src.length);
			var hsrc = src.replace(ftype, '_o'+ftype);

			aImages[i].setAttribute('hsrc', hsrc);
			
			aPreLoad[i] = new Image();
			aPreLoad[i].src = hsrc;
			
			aImages[i].onmouseover = function() {
				sTempSrc = this.getAttribute('src');
				this.setAttribute('src', this.getAttribute('hsrc'));
			}	
			
			aImages[i].onmouseout = function() {
				if (!sTempSrc) sTempSrc = this.getAttribute('src').replace('_o'+ftype, ftype);
				this.setAttribute('src', sTempSrc);
			}
		}
	}
}

window.onload = initRollovers;

Jag använder mig av:

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

Vad ska jag ta mig till?!

fel fel fel.jpg
Peter SMedlem sedan dec. 20025 483 inlägg
#2

Hej! :)

Att sidan hamnar till vänster bör inte ha något att göra med JavaScriptet. Det är snarare någonting i HTML/CSS:en som ställer till det. Vad händer om du plockar bort den inkluderade .js-filen?

lillebrorMedlem sedan apr. 20041 597 inlägg
#3

Jag har nu remmat eller bytt tillbaka till den urpsrungliga include.menu-filen och nu fungerar allts strålande! :)

Provade att byta DTD men det verkade inte ha någon betydelse!

lillebrorMedlem sedan apr. 20041 597 inlägg
#4

Felet uppstår när jag byter include.menu-fil...testade det nu...alla annan kod som har med skriptet verkar inte påverka...

Denna kod finns i include.menu-filen:

<?
# Flygfyren funktionsbibliotek 1.0
# © 2005-2006 Fredrik Tibbling

#######################################################################
# Funktioner - Ritar upp meny
#######################################################################

function show_menu($activeUser) {
	
	while($objRS = mysql_fetch_array($SQLmenu)) {
		if(!$objRS[path]) {
			echo "<a href=\"http://www.flygfyren.nu/".$objRS[filename]."\"><img src=\"".$objRS['picture']."\" alt=\"".$objRS['pagename']."\" class=\"imgover\"></a>";
			} else {
			echo "<a href=\"http://www.flygfyren.nu/".$objRS[path].$objRS[filename]."\"><img src=\"".$objRS['picture']."\" alt=\"".$objRS['pagename']."\" class=\"imgover\"></a>";
		}	
	}
	echo "<img src=\"/picture/menu/emptyright.jpg\" alt=\"Spacer\" style=\"overflow: hidden;\">";
}

if($activeUser != "Gäst") {
	echo "<img src=\"/picture/menu/emptyright.jpg\" alt=\"Spacer\">";
	} else {
	echo "<img src=\"/picture/menu/emptyright_long.jpg\" alt=\"Spacer\">";
	}
?>
lillebrorMedlem sedan apr. 20041 597 inlägg
#5

Det är även då det tjockare vita strecket dyker upp på sidan högst upp...

lillebrorMedlem sedan apr. 20041 597 inlägg
#6

Jaha...då har man fått slita sina stackars gråa hårstrån igen! :e Och boven i dramat den här gången var ett "}"-tecken som hade hamnat utanför PHP-avslutet i include.menu.filen. Det var även där det vita strecket uppstod ifrån!

Men nu är jag så jäkla nööööööööööjd! Det fungerar, i både FF och IE, SAMTIDIGIT! :birp

Peter SMedlem sedan dec. 20025 483 inlägg
#7

Gratinerar får man väl säga då! :bire

lillebrorMedlem sedan apr. 20041 597 inlägg
#8

Tog ut segern lite i förskott märkte jag... :(

Allting fungerar bra förutom när jag trycker på knappen för forumsektionen. Då upphör rollovereffekten på samtliga knappar i menyn. Funktionen kommer enbart tillbaka när jag skriver in http://www.flygfyren.nu/ igen. Det är bara på forumdelen som det verkar sluta fungera.

Försökte felsöka och började med att remma en funktionsfil för olika småskript. Det hade tyvärr ingen effekt. Har testat att lägga include-filerna i olika ordning också utan resultat.

<!--<script type="text/javascript" src="/inc/function.js"></script>-->
<script type="text/javascript" src="/inc/rollover.js"></script>
Peter SMedlem sedan dec. 20025 483 inlägg
#9

Längre ned i koden på sidan http://www.flygfyren.nu/forum/forumdisplay.php?forumID=1&limit=10 har du också inkluderat
<script language="JavaScript" src="../inc/function.js"></script>

I den får du ett fel i denna sektion:

window.onload = function() {
    fObj = [b]document.forms["newthread"].elements["forummessage"];[/b]

    if (ieC) {
	fObj.onclick  = function() { sC(); }
	fObj.onkeyup  = function() { sC(); }
	fObj.onselect = function() { sC(); }
    }
}

Det beror på att du inte har något formulär på den sidan som heter 'newthread'.

lillebrorMedlem sedan apr. 20041 597 inlägg
#10

Det var som du sa. Jag hade med ytterligare en deklaration av <script language="JavaScript" src="../inc/function.js"></script>. Du ser verkligen saker som vi andra inte ser :)

Lite off topic men ändå ett problem som hänger ihop med det tidigare.

Längst ner i varje forum har jag en select-ruta där jag kan välja forum. Om en rad som innehåller "==============" eller en forumkategori väljs ska OK-knappen sättas till disable. Formuläret genererar ett värde som är "-1". Detta detekteras i ett javascript. Det har fungerat tidigare men nu vet jag inte vad som hänt. Det måste finnas små tomtar som ställer till det för mig om nätterna :e

Javascript:

function f(obj) {
    var elms = obj.form.elements,
	opts = obj.options;

    elms['chooseshortcut'].disabled = (opts[elms['forumshortcutID'].selectedIndex].value == -1);
}

Formulärkod:

<form action="XXX" method="post">
	<?php $RSobj_forum_category = getCategory(); ?>
	<table width="100%" cellspacing="0px" cellpadding="0px" border="0px">
		<tr>
			<td style="font-size: 10px; font-weight: bold; width: 53%;">Välj forum:</td>
			<?php if($_SERVER['PHP_SELF'] == '/forum/forumdisplay.php') { ?><td style="width: 2%;">&nbsp;</td><?php } ?>
			
			<?php if($_SERVER['PHP_SELF'] == '/forum/forumdisplay.php') { ?><td style="font-size: 10px; font-weight: bold; width: 33%;">Antal visade inlägg:</td><?php } ?>
			</tr>
		<tr>
			<td>
				<SELECT class="select" name="forumshortcutID" size="1" onchange="f(this)">
				<?php while($forumcategory = mysql_fetch_array($RSobj_forum_category)) {
					$RSobj_shortcut = showShortcutForumList($forumcategory['categoryID']); ?>
					<OPTION value="-1"><?php echo $forumcategory['title']; ?>
					<OPTION value="-1">===============================
						<?php while($shortcut = mysql_fetch_array($RSobj_shortcut)) { ?>
							<?php if($shortcut['forumID'] == $RSobj_forum['forumID']) { ?>
							<OPTION value="<?php echo $shortcut['forumID']; ?>" SELECTED>- <?php echo $shortcut['title'];
							} else { ?>
							<OPTION value="<?php echo $shortcut['forumID']; ?>">- <?php echo $shortcut['title'];
							}	
						} ?>
				<OPTION value="-1">&nbsp;
				<?php }
				?>
				</SELECT>&nbsp;<input class="buttons" name="chooseshortcut" type="submit" value="OK" />
			</td>
			</form>
Peter SMedlem sedan dec. 20025 483 inlägg
#11

Det beror på att f() (som vi av semantiska skäl bör döpa om ;) ) ligger i http://www.flygfyren.nu/inc/function.js som du kommenterat bort.

Tipset kan vara att skapa fler includefiler och sedan fördela JS-funktionerna i dessa på ett lämpligt sätt. Därefter inkluderar du på varje sida endast de nödvändiga. På http://www.flygfyren.nu/forum/forumdisplay.php?forumID=1 behöver du ju t ex inte ha med kod för att infoga text i en <textarea> (bl a den delen jag påpekade i inlägg #9).

:)

lillebrorMedlem sedan apr. 20041 597 inlägg
#12

Men jag har ju den inkluderad i header-filen ju! :)

lillebrorMedlem sedan apr. 20041 597 inlägg
#13

Okej...glömde ju bort att jag remmade den inatt när felsökte i menyn... :r "Oops...I did it again!" Jobbigt att krypa till korset och inse att man har fel :e Tack Peter! Men f(this) tycker jag borde fungerar?

Peter SMedlem sedan dec. 20025 483 inlägg
#14

Jo, visst fungerar det. Men 'f' säger ju inte så mycket om vad funktionen gör. Ett bättre namn kanske är 'disableButton'. :)

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)