Toon posts:

[Javascript] Geen error als alert(var) gebruikt

Pagina: 1
Acties:

Verwijderd

Topicstarter
Soms heb ik dat ik een error melding krijg bij gebruik van een variable.
Maar als ik dan alert(variable) voor het gebruik van die variable zet dan is er niets aan de hand?

Het lijkt er bijna op dat ik met alert(variable) de variable aanmaak....
Terwijl ik er geen waarde inzet, welke hierna wel aanwezig is.

Het doet zich voor in de volgende code
code:
1
2
3
4
5
6
7
8
9
10
// border_corner is een div element in een ander frame
var border_corner = eval(docP + '("border_corner")' + sty);

// Zonder deze alert krijg ik een error (Ongeldig argument)
alert(border_corner.width); 

// Met createContent maak ik een submenu met als breedte 
// border_corner.width -15
createContent(sub_menu, 'absolute', Bcorner_h, 15, 
parseInt(border_corner.width) - 15, '', 5);

[ Voor 8% gewijzigd door Verwijderd op 12-07-2004 15:25 . Reden: Fuckup layout... ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Vage code dit, wat is docP? en sty?, en eval mag je nooit gebruiken, dat kan altijd anders. Je moet denk ik meer code posten zodat we het geheel kunnen zien, of heb je iets online staan.

Verwijderd

Topicstarter
André schreef op 12 juli 2004 @ 15:27:
Vage code dit, wat is docP? en sty?, en eval mag je nooit gebruiken, dat kan altijd anders. Je moet denk ik meer code posten zodat we het geheel kunnen zien, of heb je iets online staan.
Online: www.oudekerken.com/testkerk

var docP = "parent.document.all";
var doc = "document.all";
var sty = ".style";

Het stuk waar het fout in gaat is
www.oudekerken.com/js/frontpage.js

De variabelen docP en sty worden aangemaakt in
www.oudekerken.com/js/scriptjes.js

[ Voor 20% gewijzigd door Verwijderd op 12-07-2004 15:29 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

In dat geval:
code:
1
2
3
var borderCorner = document.getElementById("border_corner").style;

createContent(sub_menu, "absolute", Bcorner_h, 15, parseInt(borderCorner.width) - 15, "", 5);

[ Voor 53% gewijzigd door André op 12-07-2004 15:31 ]


Verwijderd

code:
1
-15 + 'px'

;)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Heb je toevallig ook een testcase, waarmee je je theorie kan staven? Heb nl. niet echt zin om zoveel scripts door te worstelen om erachter te komen dat je een verkeerde argument gebruikt :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
André schreef op 12 juli 2004 @ 15:30:
In dat geval:
code:
1
2
3
var borderCorner = document.getElementById("border_corner").style;

createContent(sub_menu, "absolute", Bcorner_h, 15, parseInt(borderCorner.width) - 15, "", 5);
Sorry maar dat helpt niet echt :D
Ten eerst omdat het dan parent.document zou moeten zijn :)
En ik wil liever weten wat het is dat dit soort errors veroorzaakt.

Het is toch vreemd dat

var iets = 220;

pas werkt als
alert(iets);
wordt gebruikt?

doiets(iets);

Verwijderd

Topicstarter
BtM909 schreef op 12 juli 2004 @ 15:32:
Heb je toevallig ook een testcase, waarmee je je theorie kan staven? Heb nl. niet echt zin om zoveel scripts door te worstelen om erachter te komen dat je een verkeerde argument gebruikt :)
:( dat is dus inderdaad jammer maar ik krijg die error dus niet zo nagemaakt :(

Verwijderd

Topicstarter
Dat gebeurt in createContent

ahum niet dus :P

[ Voor 10% gewijzigd door Verwijderd op 12-07-2004 15:37 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Met Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/silver/images/icons/edit.gif kun je je posts editten :)

Kun je niet een losstaande html maken waar die error in zit, zo hebben we te weinig info om je te helpen.

Verwijderd

André schreef op 12 juli 2004 @ 15:27:
Vage code dit, wat is docP? en sty?, en eval mag je nooit gebruiken, dat kan altijd anders. Je moet denk ik meer code posten zodat we het geheel kunnen zien, of heb je iets online staan.
Lichtelijk offtopic misschien, maar ik ben het niet met je eens dat eval() altijd te vermijden is. Voor mijn editor laad ik alle gegevens voor het menu uit een XML bestand. Wanneer een item een submenu onder zich heeft, dan ontkom je niet aan eval(). Wanneer de gebruiker namelijk met de muis over zo'n item gaat, moet voor alle items in het submenu bepaald worden of deze enabled, of disabled moet zijn. Dat doe ik door de canAcceptCommand functie van het Command uit te voeren. Eval is in zo'n geval onmogelijk...

http://www.nextavenue.com...iguration/Menus/menus.xml


Ik snap ook niet precies waarom eval() ranzig zou zijn. Niet altijd is eval() ranzig. Heel JS is eigenlijk een grote eval(). Ok, ik ben het met je eens dat je met eval() hele ranzige dingen kan doen (zie startpost ;)), maar je kan er ook nette dingen mee doen.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Een alert zorgt voor een vertraging. Als je zonder alert een fout krijgt en met niet dan betekent het dat ergens iets te snel gedaan wordt (bijvoorbeeld een object wat nog aangemaakt moet worden of iets dergelijks)

Verwijderd

Topicstarter
Bosmonster schreef op 12 juli 2004 @ 15:37:
Een alert zorgt voor een vertraging. Als je zonder alert een fout krijgt en met niet dan betekent het dat ergens iets te snel gedaan wordt (bijvoorbeeld een object wat nog aangemaakt moet worden of iets dergelijks)
Aha...

Hmmm.... dus bijvoorbeeld als de pagina nog niet volledig geladen is
Maar dat los je op door body.onload te gebruiken....

Ik ga zoeken hier kan ik iets mee :)

Edit:

Ik heb de functie een Timeout gegeven van 100ms en het Werkt

Hulde voor bosmonster

Edit2:
Is er een manier om in je script te wachten tot een object aanwezig is?

[ Voor 17% gewijzigd door Verwijderd op 12-07-2004 15:46 . Reden: Het werkt :) ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:39

crisp

Devver

Pixelated

Verwijderd schreef op 12 juli 2004 @ 15:28:
[...]

var docP = "parent.document.all";
var doc = "document.all";
var sty = ".style";
OMG, document.all :X when does the hurting stop?

Ik raad je toch aan eens naar DOM te kijken, of je moet er plezier in hebben mensen met non-IE browsers buiten te sluiten. Dat afgezien van het feit dat eval (in deze context) onnodig en ranzig is (maar dat was al gezegd ;) )

Het lijkt mij dat dus de functie al wordt uitgevoerd terwijl de pagina in het frame nog niet geladen is. Nu zal een timeout van 100ms misschien voldoende zijn als je het lokaal test, maar online zou ik daar niet op vertrouwen. Probeer dan liever onload vanuit je frame de functie aan te roepen.

[ Voor 29% gewijzigd door crisp op 12-07-2004 15:47 ]

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Ik snap niet precies wat je bedoelt, waarom zou je alleen voor submenu items eval nodig hebben en voor de menu items niet?

Verwijderd

Topicstarter
crisp schreef op 12 juli 2004 @ 15:45:
[...]

OMG, document.all :X when does the hurting stop?

Ik raad je toch aan eens naar DOM te kijken, of je moet er plezier in hebben mensen met non-IE browsers buiten te sluiten. Dat afgezien van het feit dat eval (in deze context) onnodig en ranzig is (maar dat was al gezegd ;) )
:P ja sorry dat gebruik ik ook verkeerde stukje gecopied
Ik gebruik onderstaande object detectie...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Set object specifics
        if(D.getElementById) {  // If browser is w3c DOM compliant
            var docP = "parent.document.getElementById";
            var doc = "document.getElementById";
            var sty = ".style";
            var xpos = "event.x";
            var ypos = "event.y";
        } else if(D.all) {  // If browser is IE4 compliant
            var docP = "parent.document.all";
            var doc = "document.all";
            var sty = ".style";
            var xpos = "event.x";
            var ypos = "event.y"; 
        } else if(D.layers) {   // If browser is NS compliant
            var docP = "parent.document";
            var doc = "document";
            var htm = ".document"
            var xpos = "e.pageX";
            var ypos = "e.pageY";
        } else  { // Else
            var docP = "parent.document.all";
            var doc = "document.all";
            var sty = ".style";
            var xpos = "event.x";
            var ypos = "event.y";
        }
Het lijkt mij dat dus de functie al wordt uitgevoerd terwijl de pagina in het frame nog niet geladen is. Nu zal een timeout van 100ms misschien voldoende zijn als je het lokaal test, maar online zou ik daar niet op vertrouwen. Probeer dan liever onload vanuit je frame de functie aan te roepen.
Klopt het dan dat onload vanuit de parent pas klaar is als het iframe geladen is?

[ Voor 22% gewijzigd door Verwijderd op 12-07-2004 15:52 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Verwijderd schreef op 12 juli 2004 @ 15:48:
[...]


:P ja sorry dat gebruik ik ook verkeerde stukje gecopied
Ik gebruik onderstaande object detectie...
:'( een stukje antieke code, die moet je inlijsten
* André krijgt een nostalgisch gevoel over zich heen :P
Klopt het dan dat onload vanuit de parent pas klaar is als het iframe geladen is?
Volgens mij niet.

[ Voor 19% gewijzigd door André op 12-07-2004 15:55 ]


Verwijderd

Topicstarter
André schreef op 12 juli 2004 @ 15:54:
[...]

:'( een stukje antieke code, die moet je inlijsten
* André krijgt een nostalgisch gevoel over zich heen :P


[...]
Volgens mij niet.
Wat is dan het moderne equivalent?

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Verwijderd schreef op 12 juli 2004 @ 15:57:
[...]


Wat is dan het moderne equivalent?
Gewoon document.getElementById("bla").style :)

Verwijderd

Topicstarter
André schreef op 12 juli 2004 @ 15:58:
[...]

Gewoon document.getElementById("bla").style :)
? en dat ga je overal in je code gebruiken?
dus als je al een lang stuk code hebt wordt dat rustig
strlen(document.getElementById("bla").style) - 3 langer?
Dat is toch niet handig?

Verwijderd

code:
1
2
3
4
var o = document.getElementById("blaat");
o.style.left = "0px";
o.style.top = "0px";
...


;)

Verwijderd

Topicstarter
Verwijderd schreef op 12 juli 2004 @ 16:07:
code:
1
2
3
4
var o = document.getElementById("blaat");
o.style.left = "0px";
o.style.top = "0px";
...


;)
En wat nu als er een ambtenaar op 1 of ander ranzig departement met z'n oude meuk je site bezoekt?

Dan werkt het niet?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Verwijderd schreef op 12 juli 2004 @ 16:08:
[...]


En wat nu als er een ambtenaar op 1 of ander ranzig departement met z'n oude meuk je site bezoekt?

Dan werkt het niet?
Er zijn meer mensen met javascript disabled dan die IE 4 of NS 4 gebruiken gok ik.. Ga je die ook ondersteunen? ;)

Verwijderd

Topicstarter
Bosmonster schreef op 12 juli 2004 @ 16:12:
[...]


Er zijn meer mensen met javascript disabled dan die IE 4 of NS 4 gebruiken gok ik.. Ga je die ook ondersteunen? ;)
Hmm dus jullie zeggen eigenlijk....
Wij scripten alleen W3C DOM en de rest is ouderwets, en passe?

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Verwijderd schreef op 12 juli 2004 @ 16:14:
[...]


Hmm dus jullie zeggen eigenlijk....
Wij scripten alleen W3C DOM en de rest is ouderwets, en passe?
Nee, hij zegt dat het raar is dat je WEL browsers wil ondersteunen die nog maar door 1% gebruikt wordt. Maar door js te gebruiken ga je de 5% die dat uit heeft staan NIET ondersteunen. 8)7

Verwijderd

Verwijderd schreef op 12 juli 2004 @ 16:14:
[...]


Hmm dus jullie zeggen eigenlijk....
Wij scripten alleen W3C DOM en de rest is ouderwets, en passe?
Dat bedoelde Bosmonster niet direct, maar ik vind best dat je dat mag stellen ja. Gewoon lekker W3c DOM scripten en die oude DOM modellen gewoon links laten liggen onder het motto: 'Wil je mijn site zien? Zorg dat dan je browser nieuwer is dan 4 jaar'.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:39

crisp

Devver

Pixelated

Probeer het zelf maar eens: browsen met IE4 of NS4 - je wordt gillend gek ;)

Intentionally left blank


Verwijderd

Verwijderd schreef op 12 juli 2004 @ 16:14:
Hmm dus jullie zeggen eigenlijk....
Wij scripten alleen W3C DOM en de rest is ouderwets, en passe?
Ik script persoonlijk al een jaar of 2 niet meer professioneel voor <5 browsers.
Pagina: 1