/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Fejl i javascript når det loades via php
Fra : Inger


Dato : 03-05-02 10:29

Jeg har et javascript (navigationsbar), der virker fint, når jeg
loader det direkte fra en html-side, men når jeg forsøger at
lægge scriptet ind i en php print (' ...text ...'); så får jeg
en "object expected"-fejl.
Jeg kan se, at det er når jeg via en onLoad kalder en function,
at fejlen opstår. Fejlen er tilsynesladende: JScript - anonymous
function. Men funktionen findes, og virker altså fint, når
javascriptet står på en almindelig html-side. Hvad overser jeg?

Hvis der er en eller anden, der gider hjælpe en nybegynder i php
lidt på vej, så vil et godt råd blive meget værdsat!

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jakob Møbjerg Nielse~ (03-05-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 03-05-02 11:01

> Hvad overser jeg?

Er der en side vi kan se resultatet på?

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
| -- Terry Pratchett, Reaper Man



Inger (03-05-2002)
Kommentar
Fra : Inger


Dato : 03-05-02 11:33


> Er der en side vi kan se resultatet på?

Næ, beklager. Men jeg kan forklare lidt mere:
Jeg har fnedenstående funktion liggende i en common.php-fil, der
så kaldes fra en anden php-fil med GenerateHTMLHeader();
Dele af menuen udskrives også(baren vises, men uden felter), men
stopper altså ved funktionskaldet til writeMenus().
Og jeg kalder en tilsvarende GenerateHTMLFooter, der afslutter
html-koden. Fidusen skulle så være, at jeg kan kalde de 2
funktioner fra forskellige sider, men med forskelligt indhold
midt på siden.
Javascriptet er jeg ikke mester for, og det er ikke rettet helt
til, men det virker ok til testformål på en almindelig html-side.

Gør det spørgsmålet mere klart?

function GenerateHTMLHeader()
{
   print ('<html>
         <head>

         <title>forside</title>
         <link rel="stylesheet" type="text/css" href="HJRstyle.css">

         <SCRIPT LANGUAGE="JavaScript">

            <!-- Begin
            var isDOM = (document.getElementById ? true : false);
            var isIE4 = ((document.all && !isDOM) ? true : false);
            var isNS4 = (document.layers ? true : false);
            function getRef(id) {
            if (isDOM) return document.getElementById(id);
            if (isIE4) return document.all[id];
            if (isNS4) return document.layers[id];
            }
            function getSty(id) {
            return (isNS4 ? getRef(id) : getRef(id).style);
            }
            // Hide timeout.
            var popTimer = 0;
            // Array showing highlighted menu items.
            var litNow = new Array();
            function popOver(menuNum, itemNum) {
            clearTimeout(popTimer);
            hideAllBut(menuNum);
            litNow = getTree(menuNum, itemNum);
            changeCol(litNow, true);
            targetNum = menu[menuNum][itemNum].target;
            if (targetNum > 0) {
            thisX = parseInt(menu[menuNum][0].ref.left) +
parseInt(menu[menuNum][itemNum].ref.left);
            thisY = parseInt(menu[menuNum][0].ref.top) +
parseInt(menu[menuNum][itemNum].ref.top);
            with (menu[targetNum][0].ref) {
            left = parseInt(thisX + menu[targetNum][0].x);
            top = parseInt(thisY + menu[targetNum][0].y);
            visibility = "visible";
             }
             }
            }
            function popOut(menuNum, itemNum) {
            if ((menuNum == 0) && !menu[menuNum][itemNum].target)
            hideAllBut(0)
            else
            popTimer = setTimeout("hideAllBut(0)", 500);
            }
            function getTree(menuNum, itemNum) {

            // Array index is the menu number. The contents are null (if
that menu is not a parent)
            // or the item number in that menu that is an ancestor (to
light it up).
            itemArray = new Array(menu.length);

            while(1) {
            itemArray[menuNum] = itemNum;
            // If we"ve reached the top of the hierarchy, return.
            if (menuNum == 0) return itemArray;
            itemNum = menu[menuNum][0].parentItem;
            menuNum = menu[menuNum][0].parentMenu;
             }
            }

            // Pass an array and a boolean to specify colour change, true
= over colour.
            function changeCol(changeArray, isOver) {
            for (menuCount = 0; menuCount < changeArray.length;
menuCount++) {
            if (changeArray[menuCount]) {
            newCol = isOver ? menu[menuCount][0].overCol :
menu[menuCount][0].backCol;
            // Change the colours of the div/layer background.
            with (menu[menuCount][changeArray[menuCount]].ref) {
            if (isNS4) bgColor = newCol;
            else backgroundColor = newCol;
             }
             }
             }
            }
            function hideAllBut(menuNum) {
            var keepMenus = getTree(menuNum, 1);
            for (count = 0; count < menu.length; count++)
            if (!keepMenus[count])
            menu[count][0].ref.visibility = "hidden";
            changeCol(litNow, false);
            }

            // *** MENU CONSTRUCTION FUNCTIONS ***

            function Menu(isVert, popInd, x, y, width, overCol, backCol,
borderClass, textClass) {
            // True or false - a vertical menu?
            this.isVert = isVert;
            // The popout indicator used (if any) for this menu.
            this.popInd = popInd
            // Position and size settings.
            this.x = x;
            this.y = y;
            this.width = width;
            // Colours of menu and items.
            this.overCol = overCol;
            this.backCol = backCol;
            // The stylesheet class used for item borders and the text
within items.
            this.borderClass = borderClass;
            this.textClass = textClass;
            // Parent menu and item numbers, indexed later.
            this.parentMenu = null;
            this.parentItem = null;
            // Reference to the object"s style properties (set later).
            this.ref = null;
            }

            function Item(text, href, frame, length, spacing, target) {
            this.text = text;
            this.href = href;
            this.frame = frame;
            this.length = length;
            this.spacing = spacing;
            this.target = target;
            // Reference to the object"s style properties (set later).
            this.ref = null;
            }

            function writeMenus() {
            if (!isDOM && !isIE4 && !isNS4) return;

            for (currMenu = 0; currMenu < menu.length; currMenu++) with
(menu[currMenu][0]) {
            // Variable for holding HTML for items and positions of next
item.
            var str = "", itemX = 0, itemY = 0;

            // Remember, items start from 1 in the array (0 is menu
object itself, above).
            // Also use properties of each item nested in the other
with() for construction.
            for (currItem = 1; currItem < menu[currMenu].length;
currItem++) with (menu[currMenu][currItem]) {
            var itemID = "menu" + currMenu + "item" + currItem;

            // The width and height of the menu item - dependent on
orientation!
            var w = (isVert ? width : length);
            var h = (isVert ? length : width);

            y
            // the width must be a miniumum of 3 for it to work in that
browser.
            if (isDOM || isIE4) {
            str += "<div id="" + itemID + "" style="position: absolute;
left: " + itemX + "; top: " + itemY + "; width: " + w + ";
height: " + h + "; visibility: inherit; ";
            if (backCol) str += "background: " + backCol + "; ";
            str += "" ";
            }
            if (isNS4) {
            str += "<layer id="" + itemID + "" left="" + itemX + ""
top="" + itemY + "" width="" + w + "" height="" + h + ""
visibility="inherit" ";
            if (backCol) str += "bgcolor="" + backCol + "" ";
            }
            if (borderClass) str += "class="" + borderClass + "" ";

            // Add mouseover handlers and finish div/layer.
            str += "onMouseOver="popOver(" + currMenu + "," + currItem +
")" onMouseOut="popOut(" + currMenu + "," + currItem + ")">";

            // Add contents of item (default: table with link inside).
            // In IE/NS6+, add padding if there"s a border to emulate
NS4"s layer padding.
            // If a target frame is specified, also add that to the <a>
tag.

            str += "<table width="" + (w - 8) + "" border="0"
cellspacing="0" cellpadding="" + (!isNS4 && borderClass ? 3 : 0)
+ ""><tr><td align="left" height="" + (h - 7) + "">" + "<a
class="" + textClass + "" href="" + href + """ + (frame ? "
target="" + frame + "">" : ">") + text + "</a></td>";
            if (target > 0) {

            // Set target"s parents to this menu item.
            menu[target][0].parentMenu = currMenu;
            menu[target][0].parentItem = currItem;

            // Add a popout indicator.
            if (popInd) str += "<td class="" + textClass + ""
align="right">" + popInd + "</td>";
            }
            str += "</tr></table>" + (isNS4 ? "</layer>" : "</div>");
            if (isVert) itemY += length + spacing;
            else itemX += length + spacing;
            }
            if (isDOM) {
            var newDiv = document.createElement("div");
            document.getElementsByTagName("body").item(0).appendChild(new
Div);
            newDiv.innerHTML = str;
            ref = newDiv.style;
            ref.position = "absolute";
            ref.visibility = "hidden";
            }

            // Insert a div tag to the end of the BODY with menu HTML in
place for IE4.
            if (isIE4) {
            document.body.insertAdjacentHTML("beforeEnd", "<div id="menu"
+ currMenu + "div" " + "style="position: absolute; visibility:
hidden">" + str + "</div>");
            ref = getSty("menu" + currMenu + "div");
            }

            // In NS4, create a reference to a new layer and write the
items to it.
            if (isNS4) {
            ref = new Layer(0);
            ref.document.write(str);
            ref.document.close();
            }

            for (currItem = 1; currItem < menu[currMenu].length;
currItem++) {
            itemName = "menu" + currMenu + "item" + currItem;
            if (isDOM || isIE4) menu[currMenu][currItem].ref =
getSty(itemName);
            if (isNS4) menu[currMenu][currItem].ref =
ref.document[itemName];
             }
            }
            with(menu[0][0]) {
            ref.left = x;
            ref.top = y;
            ref.visibility = "visible";
             }
            }

            // Syntaxes: *** START EDITING HERE, READ THIS SECTION
CAREFULLY! ***
            //
            // menu[menuNumber][0] = new Menu(Vertical menu?
(true/false), "popout indicator", left, top,
            // width, "mouseover colour", "background colour", "border
stylesheet", "text stylesheet");
            //
            // Left and Top are measured on-the-fly relative to the
top-left corner of its trigger, or
            // for the root menu, the top-left corner of the page.
            //
            // menu[menuNumber][itemNumber] = new Item("Text", "URL",
"target frame", length of menu item,
            // additional spacing to next menu item, number of target
menu to popout);
            //
            // If no target menu (popout) is desired, set it to 0.
Likewise, if your site does not use
            // frames, pass an empty string as a frame target.
            //
            // Something that needs explaining - the Vertical Menu setup.
You can see most menus below
            // are "true", that is they are vertical, except for the
first root menu. The "length" and
            // "width" of an item depends on its orientation -- length is
how long the item runs for in
            // the direction of the menu, and width is the lateral
dimension of the menu. Just look at
            // the examples and tweak the numbers, they"ll make sense
eventually :).

            var menu = new Array();

            // Default colours passed to most menu constructors (just
passed to functions, not
            // a global variable - makes things easier to change later in
bulk).
            var defOver = "#336699", defBack = "#003366";

            // Default "length" of menu items - item height if menu is
vertical, width if horizontal.
            var defLength = 22;

            // Menu 0 is the special, "root" menu from which everything
else arises.
            menu[0] = new Array();
            // A non-vertical menu with a few different colours and no
popout indicator, as an example.
            // *** MOVE ROOT MENU AROUND HERE *** it"s positioned at (5,
0) and is 17px high now.
            menu[0][0] = new Menu(false, "", 5, 0, 17, "#669999",
"#006666", "", "itemText");
            // Notice how the targets are all set to nonzero values...
            // The "length" of each of these items is 150, and there is
spacing of 2 to the next item.
            // Most of the links are set to "#" hashes, make sure you
change them to actual files.
            menu[0][1] = new Item("&nbsp; Tilbage til Portal", "#", "",
200 , 2, 1);
            menu[0][2] = new Item("&nbsp; Søg på ...", "#", "", 150, 2,
2);
            menu[0][3] = new Item("&nbsp; Oprettelse", "#", "", 150, 2,
3);
            menu[0][4] = new Item("&nbsp; xxxx", "#", "_new", 150, 2, 4);
            menu[0][5] = new Item("&nbsp; yyyy","#", "", 150, 2, 5);
            //menu[0][6] = new Item("&nbsp; zz","#", "", 120, 2, 5);
            //menu[0][7] = new Item("&nbsp; wwwwww","#", "", 130, 2, 5);
            // An example of a link with a target frame/window as well...

            // Tilbage til Portal menu.
            menu[1] = new Array();
            // The File menu is positioned 0px across and 22 down from
its trigger, and is 80 wide.
            // All text in this menu has the stylesheet class "item" --
see the <style> section above.
            // We"ve passed a "greater-than" sign "&gt;" as a popout
indicator. Try an image...?
            menu[1][0] = new Menu(true, "&gt;", 0, 22, 100, defOver,
defBack, "itemBorder", "itemText");
            //menu[1][1] = new Item("Kolleger", "#", "", defLength, 0,
0);
            //menu[1][2] = new Item("Til udskrift", "#", "", defLength,
0, 0);
            // Non-zero target means this will trigger a popout --
menu[4] which is the "Open" menu.
            //menu[1][3] = new Item("Simpel liste:<br> grupperet", "#",
"", defLength, 0, 4);


            // Søg på ... menu.
            menu[2] = new Array();
            menu[2][0] = new Menu(true, "&gt;", 0, 22, 80, defOver,
defBack, "itemBorder", "itemText");
            menu[2][1] = new Item("tlf nr", "#", "", defLength, 0, 0);
            menu[2][2] = new Item("xxx nr", "#", "", defLength, 0, 0);
            menu[2][3] = new Item("yyy nr", "#", "", defLength, 0, 0);

            // Oprettelse menu
            menu[3] = new Array();
            menu[3][0] = new Menu(true, "&lt;", 0, 22, 80, defOver,
defBack, "itemBorder", "itemText");
            menu[3][1] = new Item("Nyt nr", "#", "", defLength, 0, 0);
            //menu[3][2] = new Item("Index", "#", "", defLength, 0, 0);
            //menu[3][3] = new Item("About", "#", "", defLength, 0, 5);

            // xxxx menu
            menu[4] = new Array();
            // This is across but not down... a horizontal popout (with
crazy stylesheets :)...
            menu[4][0] = new Menu(true, "&gt;", 85, 0, 120, "#333366",
"#666699", "crazyBorder", "crazyText");
            // These items are lengthier than normal, and have extra
spacing due to the fancy borders.
            //menu[4][1] = new Item("Recent Doc 1:<br>Schedule", "#", "",
36, 4, 0);
            //menu[4][2] = new Item("Recent Doc 2:<br>Plan", "#", "", 36,
7, 0);
            //menu[4][3] = new Item("Etc. etc...", "#", "", defLength, 0,
0);

            // Help About popout
            menu[5] = new Array();
            // Leftwards popout with a negative x and y relative to its
trigger.
            menu[5][0] = new Menu(true, "&gt;", -85, -17, 80, defOver,
defBack, "itemBorder", "itemText");
            //menu[5][1] = new Item("Leftwards!<br>And up!", "#", "", 40,
0, 0);




            // *** OPTIONAL CODE FROM HERE DOWN ***

            // These two lines handle the window resize bug in NS4. See
<body onResize="...">.
            // I recommend you leave this here as otherwise when you
resize NS4"s width menus are hidden.

            var popOldWidth = window.innerWidth;
            nsResizeHandler = new Function("if (popOldWidth !=
window.innerWidth) location.reload()");


            // This is a quick snippet that captures all clicks on the
document and hides the menus
            // every time you click. Use if you want.

            if (isNS4) document.captureEvents(Event.CLICK);
            document.onclick = clickHandle;

            function clickHandle(evt)
            {
             if (isNS4) document.routeEvent(evt);
             hideAllBut(0);
            }


            // This is just the moving command for the example.

            function moveRoot()
            {
             with(menu[0][0].ref) left = ((parseInt(left) < 100) ? 100:
5);
            }
            // End -->
            </script>

            <!-- *** IMPORTANT STYLESHEET SECTION - Change the border
classes and text colours *** -->
            <style>
            <!--

            .itemBorder { border: 1px solid black }
            .itemText { text-decoration: none; color: #FFFFFF; font: 12px
Arial, Helvetica }

            .crazyBorder { border: 2px outset #663399 }
            .crazyText { text-decoration: none; color: #FFCC99; font:
Bold 12px Arial, Helvetica }

            -->
            </style>

            </HEAD>

            <BODY marginwidth="0" marginheight="0" style="margin: 0"
BGCOLOR=#ffffff vlink=#0000ff onLoad="writeMenus()" onResize="if
(isNS4) nsResizeHandler()">
            <!-- It"s important that you position the menu over a
background, like a table/image -->
            <table bgcolor="#848484" width="100%" border="0"
cellpadding="0" cellspacing="0">
            <tr><td height="20"><font
size="1">&nbsp;</font></td></tr></table>
       ');
}

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Ukendt (03-05-2002)
Kommentar
Fra : Ukendt


Dato : 03-05-02 11:21


"Inger" <ingerhaugaard@hotmail.com> skrev i en meddelelse
news:aatl9b$2td$1@sunsite.dk...
> Jeg har et javascript (navigationsbar), der virker fint, når jeg
> loader det direkte fra en html-side, men når jeg forsøger at
> lægge scriptet ind i en php print (' ...text ...'); så får jeg
> en "object expected"-fejl.
> Jeg kan se, at det er når jeg via en onLoad kalder en function,
> at fejlen opstår. Fejlen er tilsynesladende: JScript - anonymous
> function. Men funktionen findes, og virker altså fint, når
> javascriptet står på en almindelig html-side. Hvad overser jeg?

Hvis du bruger include("filen.js") så burde det virke, ellers kan der være
tale om mange ting, men prøv at højreklikke resultatet af dine
anstrengelser, og vælg 'vis kilde' så kan du sammenholde resultatet af dine
anstrengelser med det du forventede at få ud af dine anstrengelser (den
virker næsten hver gang)

John



Per Thomsen (05-05-2002)
Kommentar
Fra : Per Thomsen


Dato : 05-05-02 15:31


"Inger" <ingerhaugaard@hotmail.com> wrote in message
news:aatl9b$2td$1@sunsite.dk...
> Jeg har et javascript (navigationsbar), der virker fint, når jeg
> loader det direkte fra en html-side, men når jeg forsøger at
> lægge scriptet ind i en php print (' ...text ...'); så får jeg
> en "object expected"-fejl.
> Jeg kan se, at det er når jeg via en onLoad kalder en function,
> at fejlen opstår. Fejlen er tilsynesladende: JScript - anonymous
> function. Men funktionen findes, og virker altså fint, når
> javascriptet står på en almindelig html-side. Hvad overser jeg?

Jeg vil da gerne komme med et bud, som jeg ihvertfald selv husker at have
sloges meget med.

Problemet er formentlig brugen af " og '. Som jo for det første betyder
noget specielt for PHP,
så du skal være opmærksom på at bruge de rigtige. Jeg vil til enhver tid
anbefale at bruge ', og så
sætte evt. variable ind med . operatoren.
Men det løser ikke problemet for du skal også bruge ' og " i JavaScript, så
vil man måske
umiddelbart løse problemet ved at escape disse ( \' og \"), men så escaper
du dem jo for PHP, og det
er ikke det du ønske, de skal lige escapes en gang mere (altså \\\' og
\\\") - nu escaper vi fra PHP
først en backslash og så en ' eller ", de kommer ud i browseren som \" eller
\', som JavaScript så vil fortolke
som escape af " og '.

Jeg håber du forstår hvad jeg mener, løsningen er ikke blot at dobbelt
escape alle ' og "-erne, men at være
omhyggeligt opmærksom på, hvilke ' og " du gerne vil have escapet af PHP og
hvilke det er du gerne vil have
escapet af JavaScript.

Hvis du ikke skal putte nogle dynamiske data i java-scriptet så vil jeg
(ligesom John) anbefale at du blot bruger readfile eller
include, der hvor du gerne vil have dem sat ind, da det betyder at du så
ikke behøver at tænke på ovenstående.


>
> Hvis der er en eller anden, der gider hjælpe en nybegynder i php
> lidt på vej, så vil et godt råd blive meget værdsat!
Nu har jeg ihvertfald forsøgt :)

MVH Per Thomsen,
http://www.pert.dk/




Inger (06-05-2002)
Kommentar
Fra : Inger


Dato : 06-05-02 12:44

Jeg har ikke helt løst problemmet endnu, men jeg er godt på vej.
Jeg er sikker på at Per har ret i at det handler om at escape fra
henholdvis php og javascriptet. Ideen med at include tager jeg
dog også til mig, og laver derfor om på konstruktionen, så jeg
smider alt det javascript, der kun er tekst over i en fil, og så
bibeholder den del, hvor jeg bruger php-variabler.

Tak for hjælpen!

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

My Name (23-08-2002)
Kommentar
Fra : My Name


Dato : 23-08-02 09:10

Inger wrote:
> Jeg har et javascript (navigationsbar), der virker fint, når jeg
> loader det direkte fra en html-side, men når jeg forsøger at
> lægge scriptet ind i en php print (' ...text ...'); så får jeg
> en "object expected"-fejl.
> Jeg kan se, at det er når jeg via en onLoad kalder en function,
> at fejlen opstår. Fejlen er tilsynesladende: JScript - anonymous
> function. Men funktionen findes, og virker altså fint, når
> javascriptet står på en almindelig html-side. Hvad overser jeg?
>
> Hvis der er en eller anden, der gider hjælpe en nybegynder i php
> lidt på vej, så vil et godt råd blive meget værdsat!
>


Jeg har een eller anden luren ide om, at dine objektnavne ugyldige...
Javascript er temmelig følsom bl.a. med nummeriske værdier i objektnavne
.... og nummeriske værdier har det med at snige sig ind når man generer
javascript dynamisk.

Nils


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste