webForumDet fria alternativet

Fel funktion i javascript

15 svar · 937 visningar · startad av Howling_W

Howling_WMedlem sedan juli 2004132 inlägg
#1

Har en fil som heter categories.php som hämtar varor från en databas (mysql) och lägger ut dem enligt principen maingroup, secondgroup och thirdgroup typ
Kläder, skor, stl45. Det ser ut såhär vid start:

+Kläder

när man klickar på kläder blir det såhär:

-Kläder
+skor

klickar man på kläder igen återgår det till ovanstående utseende och klickar man på skor blir det såhär:

-kläder
-skor
stl45

klickar man nu på skor blir utseendet som ovan igen osv.

Problemet jag har är att det funkar endast i första steget när man klickar på kläder kommer skor fram men klickar jag seda på skor återgår det till första steget (+kläder) istället för att öppna stl45. Tror det har med javascriptet att göra. Någon som kan se felet?

<?php
// required variables
require("config.php");
 ?>

<html>

<head>

<title>MidiCart Shoppingcart Categories</title>

<link rel="stylesheet" HREF="master_style.css">

<script LANGUAGE="javascript">
<!--

var gEBI = (document.getElementById) ? true : false;
var da = (document.all) ? true : false;
var lay = (document.layers) ? true : false;

function Menu(ID)
 {
 	var ktgID = "ktg_" + ID;
 	var imgID = "img_" + ID;
 	
 	if (gEBI)
 	{
 		ktgID = document.getElementById(ktgID);
 		imgID = document.getElementById(imgID);
 		//alert("gEBI");
 	}
 	else
 	{
 		if (da)
 		{
 			ktgID = document.all(ktgID);
 			imgID = document.all(imgID);
 			//alert("da");
 		}
 		else
 		{
 			if (lay)
 			{
 				//alert("lay");
 				//KtgID = document.layers(ktgID);
 				//imgID = document.layers(imgID);
 			}
 			else
 			{
 				alert("Sorry, your browser does not support this page!");
 			}
 		}
 	}
 	if (gEBI || da)
 	{
		if (ktgID.style.display == "none")
 		{
 			ktgID.style.display = "block";
 			imgID.src = "images/minus.gif";
 		}
 		else
 		{
 			ktgID.style.display = "none";
 			imgID.src = "images/plus.gif";
 		} 	
 	}
 	else
 	{
 		if (document.layers["ktg_"+ID].visibility == "hide")
 		{
 			document.layers["ktg_"+ID].visibility = "show";
 		//	imgID.src = "images/minus.gif";
 		}
 		else
 		{
 			document.layers["ktg_"+ID].visibility = "hide";
 		//	imgID.src = "images/plus.gif"
 		}
 	}

 }

var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav6up = (is_nav && (is_major >= 5));
var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie4up  = (is_ie && (is_major >= 4));
if (!(is_nav6up || is_ie4up))
{
	document.location.href = "categories.php";
}
 //-->
</script> 

</HEAD>

<BODY TEXT="#000000" BACKGROUND="images/bg9x.jpg" LINK="#000000" VLINK="#000000" ALINK="#F70404">
<font size="2" face="Verdana, Arial, Helvetica, sans-serif"><B></B></FONT><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><B> 
&nbsp; <A HREF="main.php" TARGET="main"><font color="#0000CD"> Hem</font></A></B></FONT><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><B><br>
&nbsp; <?php echo $txt_categories ?></B></FONT><BR>
<hr width=100% size=1 color="#000000">
<font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <span class="Menu"> 
<?php

// connects to database
mysql_connect("$host","$user","$pass");

// selects database
mysql_select_db("$database");

// grabs all product information
$result = mysql_query("select DISTINCT maingroup from varor WHERE maingroup <> 'offerter' ORDER BY maingroup");

// counter for how many iterations have been done
$i=1;

while($row = mysql_fetch_row($result)) {

	echo "<IMG ID='img_$i' SRC='images/plus.gif' border='0' onClick='javascript: Menu($i);'>";

	echo "<a href='#' class='Menu' onClick='javascript: Menu($i);'><B>$row[0]</B></a><br>";

      echo "<span id='ktg_$i' style='display:none;'>";

$result2 = mysql_query("select DISTINCT maingroup, secondgroup from varor WHERE maingroup = '$row[0]' ORDER BY secondgroup");

while($row = mysql_fetch_row($result2)) {

echo "&nbsp;&nbsp;&nbsp;<IMG ID='img_$i' SRC='images/plus.gif' border='0' onClick='javascript: Menu($i);'>";

	echo "<a href='#' class='Menu' onClick='javascript: Menu($i);'><B>$row[1]</B></a><br>";

      echo "<span id='ktg_$i' style='display:none;'>";

 
	$result3 = mysql_query("select DISTINCT maingroup, secondgroup, thirdgroup from varor WHERE maingroup = '$row[0]' AND secondgroup = '$row[1]' ORDER BY thirdgroup");

while($row = mysql_fetch_row($result3)) {

echo "&nbsp;&nbsp;&nbsp;<IMG SRC='images/blank.gif' border='0'>&nbsp;<a href=\"item_list.php?maingroup=$row[0]&secondgroup=$row[1]&thirdgroup=$row[2]\" target=\"main\">$row[1]</a><br>
";

$i=$i+1;

}
}

echo "</span>";

}
?>
</span>
Peter SMedlem sedan dec. 20025 483 inlägg
#2

Kan du visa koden så som den ser ut i "Visa källa"?

Howling_WMedlem sedan juli 2004132 inlägg
#3

Hur menar du?

Howling_WMedlem sedan juli 2004132 inlägg
#4

Om jag tar "visa källa" finns inte delen med där jag vet att felet finns. Felet finns nedanför "//counter for how many iterations have been done" ganska långt ner i koden.

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#5

Howling_W skrev:

Om jag tar "visa källa" finns inte delen med där jag vet att felet finns. Felet finns nedanför "//counter for how many iterations have been done" ganska långt ner i koden.

Det är lättare och se var Javascript felet är när den har kompilerat färdigt all PHP. :)

Sen kan man gå tillbaka till ursprungskoden och rätta felet. :)

Howling_WMedlem sedan juli 2004132 inlägg
#6

php

Howling_WMedlem sedan juli 2004132 inlägg
#7

<html>

<head>

<title>MidiCart Shoppingcart Categories</title>

<link rel="stylesheet" HREF="master_style.css">

<script LANGUAGE="javascript">
<!--

var gEBI = (document.getElementById) ? true : false;
var da = (document.all) ? true : false;
var lay = (document.layers) ? true : false;

function Menu(ID)
 {
 	var ktgID = "ktg_" + ID;
 	var imgID = "img_" + ID;
 	
 	if (gEBI)
 	{
 		ktgID = document.getElementById(ktgID);
 		imgID = document.getElementById(imgID);
 		//alert("gEBI");
 	}
 	else
 	{
 		if (da)
 		{
 			ktgID = document.all(ktgID);
 			imgID = document.all(imgID);
 			//alert("da");
 		}
 		else
 		{
 			if (lay)
 			{
 				//alert("lay");
 				//KtgID = document.layers(ktgID);
 				//imgID = document.layers(imgID);
 			}
 			else
 			{
 				alert("Sorry, your browser does not support this page!");
 			}
 		}
 	}
 	if (gEBI || da)
 	{
		if (ktgID.style.display == "none")
 		{
 			ktgID.style.display = "block";
 			imgID.src = "images/minus.gif";
 		}
 		else
 		{
 			ktgID.style.display = "none";
 			imgID.src = "images/plus.gif";
 		} 	
 	}
 	else
 	{
 		if (document.layers["ktg_"+ID].visibility == "hide")
 		{
 			document.layers["ktg_"+ID].visibility = "show";
 		//	imgID.src = "images/minus.gif";
 		}
 		else
 		{
 			document.layers["ktg_"+ID].visibility = "hide";
 		//	imgID.src = "images/plus.gif"
 		}
 	}

 }

var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav6up = (is_nav && (is_major >= 5));
var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie4up  = (is_ie && (is_major >= 4));
if (!(is_nav6up || is_ie4up))
{
	document.location.href = "categories.php";
}
 //-->
</script> 

</HEAD>

<BODY TEXT="#000000" BACKGROUND="images/bg9x.jpg" LINK="#000000" VLINK="#000000" ALINK="#F70404">
<font size="2" face="Verdana, Arial, Helvetica, sans-serif"><B></B></FONT><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><B> 
&nbsp; <A HREF="main.php" TARGET="main"><font color="#0000CD"> Hem</font></A></B></FONT><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><B><br>
&nbsp; Produkter</B></FONT><BR>
<hr width=100% size=1 color="#000000">
<font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <span class="Menu"> 
<IMG ID='img_1' SRC='images/plus.gif' border='0' onClick='javascript: Menu(1);'><a href='#' class='Menu' onClick='javascript: Menu(1);'><B>Navigering</B></a><br><span id='ktg_1' style='display:none;'>&nbsp;&nbsp;&nbsp;<IMG ID='img_1' SRC='images/plus.gif' border='0' onClick='javascript: Menu(1);'><a href='#' class='Menu' onClick='javascript: Menu(1);'><B>GPS/Plotter</B></a><br><span id='ktg_1' style='display:none;'></span></span> 
<HR WIDTH=100% size=1 COLOR="#000000">
<B>&nbsp; <a href="losenord.php" target="main"><font color="#000000"> Offerter</font></a><BR>
&nbsp; <a href="elpaneler_kund.php" target="main"><font color="#000000"> El-paneler</font></a><BR>
&nbsp; <a href="xxx.php" target="main"><font color="#000000"> Laptops</font></a><BR>
<HR WIDTH=100% size=1 COLOR="#000000">
&nbsp; <a href="contact.php" target="main"><font color="#000080"> Kontakt</font></a><BR>
&nbsp; <a href="terms.php" target="main"><font color="#000080"> K&ouml;pvillkor</font></a><BR>
&nbsp; <a href="info.php" target="&quot;main&quot;"> </a><a href="info.php" target="main"><font color="#000080"> Information</font><br>
</a> 
<HR WIDTH=100% size=1 COLOR="#000000">
 &nbsp; 
<a href="manualer.php" target="main"><font color="#000080"> Produktinformation</font></a><br>
&nbsp; <a href="varumarken.php" target="main"><font color="#000080"> Våra varumärken</font></a><br>
</B></FONT>
<HR WIDTH=100% size=1 COLOR="#000000">
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="images/mc_vs_accpt_h_023_gif.gif" width="75" height="23"><br>
  <font size="1" face="Verdana, Arial, Helvetica, sans-serif"><font color="#000080"> 
  </font></font><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &nbsp; <br>
  &nbsp; </font></font> 
  <!-- Loopia Counter Beginning -->
  <img src="http://.loopia.se/stats_img.php?domain=" alt="" width="1" height="1" border="0"> 
  <!-- Loopia Counter End -->
</p>
</body>
</html>
The_HulkMedlem sedan juni 20031 837 inlägg
#8

När du klickar på GPS plotter så anropar du Menu(1) vilket också anropas när du klickar på Navigering.

Du ökar inte $i i din andra while-loop utan det görs bara i den tredje.
vet inte om det är felet men titta närmare på det.

/red

 
$i=$i+1;

kan skrivas på flera sätt

 
$i += 1;
 
$i++;
 
++$i;

Den siste säger många ska vara snabbare. dock har det inte så står betydelse utan det är bättre man skriver kod som man själv tycker är lättläst. Sen får man tänka om andra också ska läsa koden så bör man skriva på ett sätt som alla förstår.

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

Det finns ett par fundamentala fel i den koden. För det första använder samma id-värde på flera element (img_1, ktg_1). För det andra anropar du Menu() med '1' som argument både för "Navigering" och "GPS/Plotter"; det resulterar ju i att samma operation utförs för båda länkarna. För det tredje - vad vill du egentligen skall hända när man klickar på "GPS/Plotter"?

Howling_WMedlem sedan juli 2004132 inlägg
#10

Ok ska kolla ..tackar!

Howling_WMedlem sedan juli 2004132 inlägg
#11

peter_s

OK hur skall jag göra för att använda olika id?

Vad ska jag anropa GPS/Plotter med då?
När jag trycker på GPS/plotter skal ju tredje kategorin komma upp (thirdgroup)

The_HulkMedlem sedan juni 20031 837 inlägg
#12

Om du kollar mitt inlägg så skrev jag att du även måste öka på värdet på $i i din andra while-loop som skriver ut länkar. Du bör nog också öka på värdet i din första while-loop.
Nu resulterade inte ditt exempel i så många alternativ. du hade en huvudgrupp där det fanns en undergrupp.

/red
märkte att du inte använda $i i din tredje while-loop men där ökade du ändå på värdet för varje loop den körde, verkar väldigt underligt.
Flytt ut den till den omgivande loopen.

Öka på $i efter sista gången du använt det i respektive loop.

Hmm, när jag tittad elite bättre på din kod märkte jag att du öppnar en SPAN i loop 1 och loop 2, dock verkar du inte stänga stänga den i loop 2 utan bara i loop 1 samt att du stänger en span efter alla loopar.

I din tredje loop verkar du skriva ut namnet på den andra gruppen.

Tips:
När man har ett träd av kataloger är bättre att lägga alla kataloger i en separat tabell där. Då finns det ingen begränsning på hur djupt trädet ska vara plus att det blir lättare att ändra namnen på grenarna i trädet. Har du en katalog-tabell behöver du bara ett fält i artikel-tabellen som anger slutgrenen i trädet.

Howling_WMedlem sedan juli 2004132 inlägg
#13

OK..det är så att jag inte själv har kodat detta...är inte speciellt insatt i kodning..kan du visa konkret vad jag skall göra är jag tacksam...

Koden var från början endast för två grupper maingroup och secondgroup. Jag ville lägga till en till thirdgroup och kopierade helt enkelt lite kod och lade till en result3.
Detta är den ursprungliga koden som jag vet fungerar. Som du ser har jag lagt till en result3 i den föregående och kopierat lite kod från result till result2 med det är tydligen inte så enkelt....


<html>

<head>

<title>MidiCart Shoppingcart Categories</title>

<link rel="stylesheet" HREF="master_style.css">

<script LANGUAGE="javascript">
<!--

var gEBI = (document.getElementById) ? true : false;
var da = (document.all) ? true : false;
var lay = (document.layers) ? true : false;

function Menu(ID)
 {
 	var ktgID = "ktg_" + ID;
 	var imgID = "img_" + ID;
 	
 	if (gEBI)
 	{
 		ktgID = document.getElementById(ktgID);
 		imgID = document.getElementById(imgID);
 		//alert("gEBI");
 	}
 	else
 	{
 		if (da)
 		{
 			ktgID = document.all(ktgID);
 			imgID = document.all(imgID);
 			//alert("da");
 		}
 		else
 		{
 			if (lay)
 			{
 				//alert("lay");
 				//KtgID = document.layers(ktgID);
 				//imgID = document.layers(imgID);
 			}
 			else
 			{
 				alert("Sorry, your browser does not support this page!");
 			}
 		}
 	}
 	if (gEBI || da)
 	{
		if (ktgID.style.display == "none")
 		{
 			ktgID.style.display = "block";
 			imgID.src = "images/minus.gif";
 		}
 		else
 		{
 			ktgID.style.display = "none";
 			imgID.src = "images/plus.gif";
 		} 	
 	}
 	else
 	{
 		if (document.layers["ktg_"+ID].visibility == "hide")
 		{
 			document.layers["ktg_"+ID].visibility = "show";
 		//	imgID.src = "images/minus.gif";
 		}
 		else
 		{
 			document.layers["ktg_"+ID].visibility = "hide";
 		//	imgID.src = "images/plus.gif"
 		}
 	}

 }

var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav6up = (is_nav && (is_major >= 5));
var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie4up  = (is_ie && (is_major >= 4));
if (!(is_nav6up || is_ie4up))
{
	document.location.href = "categories.php";
}
 //-->
</script> 

</HEAD>

<BODY TEXT="#000000" BACKGROUND="images/bg9x.jpg" LINK="#000000" VLINK="#000000" ALINK="#F70404">
<font size="2" face="Verdana, Arial, Helvetica, sans-serif"><B></B></FONT><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><B> 
&nbsp; <A HREF="main.php" TARGET="main"><font color="#0000CD"> Hem</font></A></B></FONT><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><B><br>
&nbsp; Produkter</B></FONT><BR>
<hr width=100% size=1 color="#000000">

<font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <span class="Menu"> 
<IMG ID='img_1' SRC='images/plus.gif' border='0' onClick='javascript: Menu(1);'><a href='#' class='Menu' onClick='javascript: Menu(1);'><B>Navigering</B></a><br><span id='ktg_1' style='display:none;'>&nbsp;&nbsp;&nbsp;<IMG SRC='images/blank.gif' border='0'>&nbsp;<a href="item_list.php?maingroup=Navigering&secondgroup=GPS/Plotter" target="main">GPS/Plotter</a><br>
</span></span> 

<HR WIDTH=100% size=1 COLOR="#000000">
<B>&nbsp; <a href="losenord.php" target="main"><font color="#000000"> Offerter</font></a><BR>
&nbsp; <a href="elpaneler_kund.php" target="main"><font color="#000000"> El-paneler</font></a><BR>
&nbsp; <a href="xxx.php" target="main"><font color="#000000"> Laptops</font></a><BR>
<HR WIDTH=100% size=1 COLOR="#000000">
&nbsp; <a href="contact.php" target="main"><font color="#000080"> Kontakt</font></a><BR>
&nbsp; <a href="terms.php" target="main"><font color="#000080"> K&ouml;pvillkor</font></a><BR>
&nbsp; <a href="info.php" target="&quot;main&quot;"> </a><a href="info.php" target="main"><font color="#000080"> Information</font><br>
</a> 
<HR WIDTH=100% size=1 COLOR="#000000">
 &nbsp; 
<a href="manualer.php" target="main"><font color="#000080"> Produktinformation</font></a><br>
&nbsp; <a href="varumarken.php" target="main"><font color="#000080"> Våra varumärken</font></a><br>
</B></FONT>
<HR WIDTH=100% size=1 COLOR="#000000">
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="images/mc_vs_accpt_h_023_gif.gif" width="75" height="23"><br>
  <font size="1" face="Verdana, Arial, Helvetica, sans-serif"><font color="#000080"> 
  </font></font><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &nbsp; <br>
  &nbsp; </font></font> 
  <!-- Loopia Counter Beginning -->
  <img src="http://.se/stats_img.php?domain=" alt="" width="1" height="1" border="0"> 
  <!-- Loopia Counter End -->
</p>
</body>
</html>
The_HulkMedlem sedan juni 20031 837 inlägg
#14

testa att lägga till
++$i;
ovanför
while($row = mysql_fetch_row($result2)) {

samt
++$i;
ovanför
while($row = mysql_fetch_row($result3)) {

samt plocka bort
$i=$i+1;

vet inte om det räcker men testa gärna

du ska även ändra

while($row = mysql_fetch_row($result3)) {

echo "&nbsp;&nbsp;&nbsp;<IMG SRC='images/blank.gif' border='0'>&nbsp;<a href=\"item_list.php?maingroup=$row[0]&secondgroup=$row[1]&thirdgroup=$row[2]\" target=\"main\">$row[1]</a><br>
";

till för att skriva ut rätt grupp i tredje djupet.

while($row = mysql_fetch_row($result3)) {

echo "&nbsp;&nbsp;&nbsp;<IMG SRC='images/blank.gif' border='0'>&nbsp;<a href=\"item_list.php?maingroup=$row[0]&secondgroup=$row[1]&thirdgroup=$row[2]\" target=\"main\">$row[2]</a><br>
";

/red
just det, du behöver kanske också ändra

$i=$i+1;

}
}

echo "</span>";

}

till

}
echo "</span>";
}
echo "</span>";
}
Howling_WMedlem sedan juli 2004132 inlägg
#15

OKtack..skall prova.

Howling_WMedlem sedan juli 2004132 inlägg
#16

Nu har jag gjort som du föreslog och det ser ut att fungera!!. Tack för hjälpen..jag bjuder på en virtuell pizza:-)

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