Avatar billede buxxy Praktikant
27. oktober 2010 - 14:16 Der er 22 kommentarer og
1 løsning

JavaScripf melder fejl

Hej Eksperter.

Jeg har kigget på noget JavaScript, som skal bruges til at få vist andet indhold i en tabel ved klik på et link. Det jeg roder med kan ses her: www.phpfusion-tips.dk
- center-elementet der hedder "Top forum brugere" lidt nede på siden.

Det virker egentligt upåklageligt, og melder ej heller om W3C-fejl. Dog fremkommer IE med den lille gule advarselstrekant: "Udført, men med fejl på siden."

Fejlmelding lyder som flg.:

------------------------
Detaljer om fejl på websiden

Brugeragent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Tidsstempling: Wed, 27 Oct 2010 12:06:48 UTC


Meddelelse: Et objekt er obligatorisk
Linje: 9
Tegn: 5
Kode: 0
URI: http://www.phpfusion-tips.dk/infusions/top_forum_users_panel/javascripts/js.js
------------------------


Her følger selve .php-koden der kalder JavaScriptet, samt er også koden der viser "Top forum brugere":

------------------------
<?php
$tfup = "5"; // Afjust the number of top forum users shown in the panel

if (file_exists(INFUSIONS."top_forum_users_panel/locale/".$settings['locale'].".php")) {
    include INFUSIONS."top_forum_users_panel/locale/".$settings['locale'].".php";
} else {
    include INFUSIONS."top_forum_users_panel/locale/English.php";
}

  add_to_head("<link rel='stylesheet' href='".INFUSIONS."top_forum_users_panel/css/style.css' type='text/css' />");
  add_to_head("<script type='text/javascript' src='".INFUSIONS."top_forum_users_panel/javascripts/js.js'></script>");

opentable($locale['tfup000']);
  echo "<table cellspacing='0' cellpadding='0' width='100%'><tr>\n";
    echo "<td align='left'>".$locale['tfup003']."&nbsp;<span id='posts' onclick=\"return SetBoxText('posts');\"><a href=\"java script:show_hide()\"><b>".$locale['tfup001']."</b></a></span>\n";
    echo "|&nbsp;<span id='threads' onclick=\"return SetBoxText('threads');\"><a href=\"java script:show_hide()\"><b>".$locale['tfup002']."</b></a></span></td>\n";
    echo "</tr><tr>\n";
    echo "<td align='left'><div id='box_text' style='overflow: auto; padding: 0px'>&nbsp;</div>";

// Top posts start
echo "<div class='box' id='title_posts'>";
$sql=dbquery("SELECT * FROM ".DB_USERS." ORDER BY user_posts DESC LIMIT ".$tfup);
echo "<table width='100%' cellspacing='1' cellpadding='1'><tr>\n";
$i=0;
while ($data=dbarray($sql)) {
echo "<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>\n";
if(!empty($data['user_avatar'])){
$avatar="<img src='".IMAGES."avatars/".$data['user_avatar']."' alt='".$data['user_name']."' title='".$data['user_name']."' height='50' border='0' />";
} else {
$avatar="<img src='".INFUSIONS."top_forum_users_panel/images/noav.gif' width='50' height='50' border='0' alt='".$data['user_name']."' title='".$data['user_name']."' />";
}
echo"$avatar</a></td>\n
<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>".$data['user_name']."</a><br /> - ".$data['user_posts']." ".$locale['tfup001']."</td>\n";
$i++;
}
echo "</tr></table>";
echo "</div>\n";
// Top posts end

// Top Threads start
echo "<div class='box' id='title_threads'>";
$sql = "SELECT count(*) as ialt, u.user_id, u.user_avatar, u.user_name FROM ".DB_THREADS." as p JOIN ".DB_USERS." as u ON u.user_id=p.thread_author GROUP BY thread_author ORDER BY ialt DESC LIMIT ".$tfup;
$result = dbquery($sql);
echo "<table width='100%' cellspacing='1' cellpadding='1'><tr>\n";
$i=0;
while ($data=dbarray($result)) {
list($threads) = dbarraynum(dbquery("SELECT COUNT(thread_id) FROM ".DB_THREADS." WHERE thread_author='".$data['user_id']."'"));
$threads = empty($threads) ? 0 : $threads;
echo "<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>\n";
if(!empty($data['user_avatar'])){
$avatar="<img src='".IMAGES."avatars/".$data['user_avatar']."' alt='".$data['user_name']."' title='".$data['user_name']."' height='50' border='0' />";
} else {
$avatar="<img src='".INFUSIONS."top_forum_users_panel/images/noav.gif' width='50' height='50' border='0' alt='".$data['user_name']."' title='".$data['user_name']."' />";
}
echo"$avatar</a></td>\n
<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>".$data['user_name']."</a><br /> - ".number_format($threads)." ".$locale['tfup002']."</td>\n";
$i++;
}
echo "</tr></table>\n";
echo "</div>\n";
// Top Threads end

echo "</td>\n";
echo "</tr></table>\n";
closetable();

echo "<script type=\"text/javascript\"> SetBoxText('posts');</script>";
?>
------------------------

Er her mon et skarpt hovede der kan se hvad der går galt ?

Mvh.
Buxxy.
Avatar billede claes57 Ekspert
27. oktober 2010 - 14:27 #1
koden en gang til - kør siden i din browser, og tryk 'vis kode'
Så får vi den uden php, og som browser ser den - det er hurtigere.
Avatar billede erikjacobsen Ekspert
27. oktober 2010 - 15:19 #2
Har du et element på siden, der hedder "title_welcome" ?
Avatar billede buxxy Praktikant
27. oktober 2010 - 18:06 #3
Hmm, underligt, jeg har ikke modtaget nogen email vedr. svar i debatten. Derfor jeg først svarer nu - nå, jeg hlder øje med debatten manuelt.

@claes57: Mener du kildekoden ? Hehe, den er jo ret lang, og kan ikke postes her i tråden /den bliver afcuttet ved preview)
- men kan du ikke selv se kildekoden - ellers misforstår jeg dig tror jeg ?


@erikjacobsen: Jeg har nul forstand på JavaScript - og er ikke helt klar over om du mener et element på siden der bruger JavaScript (du spørger ud til) ? - eller ?
Avatar billede claes57 Ekspert
27. oktober 2010 - 18:47 #4
det er koden
    $hide = "welcome";
    if ($show == "welcome") $hide = "welcome";
    with (document.getElementById("title_" + $hide).style) {
      backgroundColor = "#DFDFDF";
      color = "black";
    }
i filen js.js
så, som #2 skriver - der mangler et element. Man kan evt bare slette de 6 linjer i filen.
Avatar billede keysersoze Ekspert
27. oktober 2010 - 18:48 #5
PHP kan ikke kalde javascript - PHP er serverside og JS er clientside. Det interessante er altså at se hvad der kommer ud på klienten og ikke nødvendigvis hvordan du genererer brudstykker af koden.

Dit javascript fejler i en linje, hvor den forsøger at finde et HTML-element ved det navn som erikjacobsen henviser til - det kan være en div, en table etc. Findes dette element ikke får du den fejl du oplever - så har du kopieret scriptet et sted fra så sørg for at få det hele med.
Avatar billede buxxy Praktikant
27. oktober 2010 - 19:10 #6
Jeg har ikke adgang pt. til FTP på førnævnte PHPFusion-Tips.dk - men har i stedet lagt det op her på mit test-site:
www.tips.dvdside.dk/

Dertil har jeg tilrettet i JS-koden - så den ikke langere kalder andet end "posts" og "threads". Jeg kunne se at der jo var noget med "welcome" - og det kommer af fordi scriptet er kopieret fra tidligere mods/infusioner til PHP-Fusion. Som sagt jeg ikke inde i JS - og derfor "lever" pt. på copy/paste indenfor området.
Avatar billede claes57 Ekspert
27. oktober 2010 - 20:02 #7
så er der kun en fejl i css - linien
.grayscale{opacity:.4;// for IE5-7 filter:alpha(opacity=40);// for IE8 -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";}
vil firefox ikke være med til.
Avatar billede buxxy Praktikant
27. oktober 2010 - 23:21 #8
Fejlen er der nu stadig. Prøv at trykke på enten linket "Indlæg" eller "Tråde" - og fejlen består stadig..

Altså på www.tips.dvdside.dk/ - og stadig center-panelet det hedder "Top forum brugere".

OBS: Hvis det kan lade sig gøre via brug af evt. anden JS-kode - eller evt. via jQuery, ja så er jeg interesseret i det ligeså. Jeg vil egentligt blot opnå et "mål" uden fejl-meddelser.
Avatar billede claes57 Ekspert
28. oktober 2010 - 12:27 #9
linjen
//modified by Wooya to W3C standards
function show_hide(msg_id) {
  document.getElementById(msg_id).style.display = document.getElementById(msg_id).style.display == 'none' ? 'block' : 'none';


fejlen er
document.getElementById(msg_id) is null
så fjern i filen jscript.js linjerne
464-467
Avatar billede buxxy Praktikant
28. oktober 2010 - 14:25 #10
Hej.

Hmm, eneste fil jeg har i-fbm. det jeg er igang med nu er js.js - er det den du mener ?

Den har i øvrigt kun 20 linjer i kode:
http://www.tips.dvdside.dk/infusions/top_forum_users_panel/javascripts/js.js

Mvh.
Buxxy.
Avatar billede claes57 Ekspert
28. oktober 2010 - 14:34 #11
Avatar billede buxxy Praktikant
28. oktober 2010 - 16:07 #12
Nu har jeg slettet det du skrev - men kan slet slet ikke forstå hvad det skulle have med sagen at gøre ? Den fil du nu henviser til, ja den har alle dage været der - og den har jeg ikke rodet med tidligere heller. Den fil er til min replikboks.

Det jeg roder med nu er jo elementet "Top forum brugere" - ikke replikboksen.

Men fejlen er stadig det samme - på trods af jeg har slettet det du skrev.

Fejlen fremkommer først når man trykker på et af de 2 links i "Top forum brugere": "Indlæg" eller "Tråde".

Sorter efter: Indlæg | Tråde
Avatar billede claes57 Ekspert
28. oktober 2010 - 16:58 #13
Fejl: document.getElementById(msg_id) is null
Kildefil: http://www.tips.dvdside.dk/includes/jscript.js
Linje: 466
der ligger den sørme også...
det er stadig:
//modified by Wooya to W3C standards
function show_hide(msg_id) {
  document.getElementById(msg_id).style.display = document.getElementById(msg_id).style.display == 'none' ? 'block' : 'none';
}
Avatar billede buxxy Praktikant
28. oktober 2010 - 17:24 #14
Altså - jeg har ikke meget forstand på JS, men jeg er da helt 112% sikker på, at det ikke har noget at gøre med alle mulige andre filer - end dem der hører til "Top forum brugere".

Den fil du henviser til, ja det er en standart .js-fil der følger med PHP-Fusion. Hvorfor kan/skal det have noget med den fil at gøre, når nu den slet intet har med det jeg roder at gøre ?

Jeg prøvede dog alligevel - bare for sjov, at slette det du sagde - men problemet er præcist det samme endnu.

Det må og kan da vel kun have noget at gøre med den fil der ligger her: http://www.tips.dvdside.dk/infusions/top_forum_users_panel/javascripts/js.js - og så selvfølgelig selve .php-koden jeg postede i indlæg #1.

Nu siger jeg flg. med yderst forsigtighed + venlighed: Jeg har ikke i sinde at følge flere forslag, hvis de drejer sig om at ændre/redigere på filer der intet har med det at gøre + filer der er standart i CMS'et. Jeg har ikke meget forstand på JS - men ved at det ikke kan have noget at gøre med alle mulige andre filer, når hjemmesiden ikke meldte fejl inden jeg installerede elementet "Top forum brugere". Den melder fejl nu, efter jeg har installeret elementet. Ergo er det altså også noget med elementets koder at gøre...
Avatar billede claes57 Ekspert
28. oktober 2010 - 18:51 #15
det er bare der, hvor min browser melder fejl. Og fejlen er der ikke, når jeg går ind på siden, men først når jeg klikker på et af de 2 link.
Avatar billede keysersoze Ekspert
28. oktober 2010 - 19:15 #16
Jeg er 112% sikker på at fejlen på dvdside.dk opstår i funktionen show_hide() - i hvert fald på dvd-siden - det kan ses ved at forsøge at eksekvere funktionen i firebug i firefox. Den fejl har ikke noget at gøre med js.js, funktionen deri gå fint igennem og kan ikke umiddelbart konflikte med show_hide.

samme funktion fejler også på tips-siden men dog med en anden fejl - på dvd ser det ud som om funktionen slet ikke findes mens det på tips igen er et element der ikke findes der er årsagen. til gengæld fejler funktionen i js.js på tips-siden.

Når der er forskel på siderne og ingen aner hvad der sker, formentlig inkl dig selv, eller skal ske er det uhyre svært at komme med løsninger - så du må prøve at alerte nogle variabler ud for at se om der sker det du vil forvente af dit javascript.
Avatar billede buxxy Praktikant
28. oktober 2010 - 23:29 #17
Der skulle vel ikke være kendskab til link til et. evt. script der allerede er lavet - og som kan få indhold i en tabel til at skifte ? Det skal siges at jeg selvfølgelig har søgt på det, inden jeg oprettede mit spørgsmål her. Dog synes det meste at være JavaScript - hvilket jeg ikke kan hitte ud af. Eller muligvis jo, hvis der blot fulgte en god forklaring/vejledning med - så skal jeg evt. nok kunne følge den.
Avatar billede claes57 Ekspert
29. oktober 2010 - 11:43 #18
du kan jo lave to tabeller i hver sin div og lade den ene være skjult.
klik på link vil skjule en og vise anden / omvendt for andet link.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-1">
<SCRIPT type=text/javascript>
var taellermin=1;
var taellermax=2;

function vis(tblnr) {
var i=taellermin;
for (i=taellermin;i<=taellermax;i++) {
    document.getElementById("f"+i).style.display = "none";
}
document.getElementById("f"+tblnr).style.display = "";
}
</SCRIPT>
</head>
<body>
<table border="1"><tr><td style="width:300px; height:250px; text-align:center; vertical-align:top;">
<a href="#" onClick="vis('1');">Indlæg</a> | <a href="#" onClick="vis('2');">Tråde</a>
<hr>
<DIV id="f1">tabel med indlæg kodes her</DIV>
<DIV id="f2" style="display:none;">tabel med tråde kodes her</DIV>
</td></tr></table>
</body>
</html>
Avatar billede buxxy Praktikant
29. oktober 2010 - 14:02 #19
Nå, jeg hittede dælme tilmed selv 2 stk. løsninger på mit problem. Jeg sat mig ind i, lang om længe, hvordan Firebug fungerer til FF - og vupti, lige efter fik jeg fejl-meldingen om at show_hide ikke var defineret. Og det tror da f******, når nu den funktion var fra et tidligere forsøg/anden JS-kode.

1. løsning bestod derfor i, rigtig nok som keysersoze var inde på, at "der var noget galt" med show_hide-funktionen. Og lol, jeg havde jo kommet til at bruge en stump kode fra et endnu tidligere forsøg (med et helt 3. JS) - her havde jeg så ikke fået fjernet show_hide-functionen. Så løsning 1 blev som flg.:
Jeg skiftede dette ud:
----------
echo "<td align='left'>".$locale['tfup003']." <span id='posts' onclick=\"return SetBoxText('posts');\"><a href=\"java script:show_hide()\"><b>".$locale['tfup001']."</b></a></span>\n";
echo "| <span id='threads' onclick=\"return SetBoxText('threads');\"><a href=\"java script:show_hide()\"><b>".$locale['tfup002']."</b></a></span></td>\n"
----------
- med dette:
echo "<td align='left'>".$locale['tfup003']." <a href=\"#posts\" onclick=\"return SetBoxText('posts');\"><b>".$locale['tfup001']."</b></a>\n";
echo "| <a href=\"#threads\" onclick=\"return SetBoxText('threads');\"><b>".$locale['tfup002']."</b></a></td>\n";
----------
Løsning 2 var: Jeg læste en del om jQuery hele natten lang - og endte op med denne løsning: http://www.authenticsociety.com/blog/jQueryTabsPlugin

Som så ser sådan ud implementeret i koden:
----------
<?php
$tfup = "5"; // Afjust the number of top forum users shown in the panel

if (file_exists(INFUSIONS."top_forum_users_panel/locale/".$settings['locale'].".php")) {
    include INFUSIONS."top_forum_users_panel/locale/".$settings['locale'].".php";
} else {
    include INFUSIONS."top_forum_users_panel/locale/English.php";
}

add_to_head("<script type='text/javascript' src='".INFUSIONS."top_forum_users_panel/include/jquery.js'></script>");

add_to_head("<style type=\"text/css\">
#MyTabbedView { position: relative; }
#MyTabbedView .tab { cursor: pointer; padding: 4px; }
#Link1,#Link2 { visibility: hidden; display: block; }
</style>");

add_to_head("<script type=\"text/javascript\">
    $(document).ready(function() {

        jQuery.Tabs.initialize( \"MyTabbedView\",
                                \"100%\", \"3px\",
                                2,
                                ['".$locale['tfup001']."', '".$locale['tfup002']."'],
                                ['Link1', 'Link2'] );

    });
</script>");

opentable($locale['tfup000']);
echo "<div id='MyTabbedView'></div>\n";

// Top posts start
echo "<div id='Link1'>\n";
$sql=dbquery("SELECT * FROM ".DB_USERS." ORDER BY user_posts DESC LIMIT ".$tfup);
echo "<table width='100%' cellspacing='1' cellpadding='1'><tr>\n";
$i=0;
while ($data=dbarray($sql)) {
echo "<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>\n";
if(!empty($data['user_avatar'])){
$avatar="<img src='".IMAGES."avatars/".$data['user_avatar']."' alt='".$data['user_name']."' title='".$data['user_name']."' height='50' border='0' />";
} else {
$avatar="<img src='".INFUSIONS."top_forum_users_panel/images/noav.gif' width='50' height='50' border='0' alt='".$data['user_name']."' title='".$data['user_name']."' />";
}
echo"$avatar</a></td>\n
<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>".$data['user_name']."</a><br /> - ".$data['user_posts']." ".$locale['tfup001']."</td>\n";
$i++;
}
echo "</tr></table>\n";
echo "</div>\n";
// Top posts end

// Top Threads start
echo "<div id='Link2'>\n";
$sql = "SELECT count(*) as ialt, u.user_id, u.user_avatar, u.user_name FROM ".DB_THREADS." as p JOIN ".DB_USERS." as u ON u.user_id=p.thread_author GROUP BY thread_author ORDER BY ialt DESC LIMIT ".$tfup;
$result = dbquery($sql);
echo "<table width='100%' cellspacing='1' cellpadding='1'><tr>\n";
$i=0;
while ($data=dbarray($result)) {
list($threads) = dbarraynum(dbquery("SELECT COUNT(thread_id) FROM ".DB_THREADS." WHERE thread_author='".$data['user_id']."'"));
$threads = empty($threads) ? 0 : $threads;
echo "<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>\n";
if(!empty($data['user_avatar'])){
$avatar="<img src='".IMAGES."avatars/".$data['user_avatar']."' alt='".$data['user_name']."' title='".$data['user_name']."' height='50' border='0' />";
} else {
$avatar="<img src='".INFUSIONS."top_forum_users_panel/images/noav.gif' width='50' height='50' border='0' alt='".$data['user_name']."' title='".$data['user_name']."' />";
}
echo"$avatar</a></td>\n
<td align='left'><a href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>".$data['user_name']."</a><br /> - ".number_format($threads)." ".$locale['tfup002']."</td>\n";
$i++;
}
echo "</tr></table>\n";
echo "</div>\n";
// Top Threads end

closetable();

?>
----------
Og det er således sidstnævnte løsning jeg valgte at bruge. I grunden meget meget let at have med at gøre. 3 div-containere under hinanden i koden - det er jo til at hitte ud af :)

keysersoze + claes57: I har nu alligevel fortjent point, da I begge har hjulpet til i debatten. Er det ok med 50/50% til hver ?
Avatar billede claes57 Ekspert
29. oktober 2010 - 14:14 #20
bare hold mig ude...
Avatar billede buxxy Praktikant
29. oktober 2010 - 14:52 #21
Ja ok - men du skal i hvert fald ha' et stort tak så!

@keysersoze: Smider du lige et svar så ?

Hav en god weekend I øvrigt!
Avatar billede keysersoze Ekspert
29. oktober 2010 - 20:11 #22
Jquery er et fremragende framework - måske lidt overkill hvis det kun benyttes til en simpel show/hide, men til gengæld simpelt og så er du også, i hvert fald lidt, forberedt til fremtidige Jquery-løsninger :)
Avatar billede buxxy Praktikant
29. oktober 2010 - 20:23 #23
Het enig - intet mindre end fremragende! Dertil synes jeg det er nemmere at hitte ud af - end ren JS er - kan det passe, eller har jeg måske bare fået lidt "slået fast" nu efter alle mine forsøg/læsning i nat ?

Har desuden skiftet til et anden jQuery nu (eller for et par timer siden): www.tips.dvdside.dk
- som jo er en del smartere igen.

Nå, som nævnt; tak for det!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester