identificeren object buiten functie kan niet?

Pagina: 1
Acties:

  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 03-02 22:51
Het kan zijn dat ik in de kerstvakantie m'n beetje kennis ook kwijt ben geraakt maar ik snap hier ff nix van:

Als ik een var zet buiten een functie (x = 5) dan is die globaal aanwezig, right? en kan ik deze vrolijk binnen alle functies gebruiken.

Als ik een DIV identificeer buiten een functie en aan een globale var hang dan kan ik deze vervolgens niet meer binnen de functies gebruiken...
Klopt dat of zit ik te klooien? :?

Dit returned 'null' als ik bla() aanroep:
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>melpert</title>
    
    <script>
    theDiv = document.getElementById('blaat');
    
    function bla(){
        alert(theDiv);
    }
    
    </script>
</head>

<body>

<div id="blaat">
heej joh
</div>

<a href="#" onclick="bla();return false;">klik</a>

</body>
</html>


en dit [object], logisch:

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
27
28
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>melpert</title>
    
    <script>
        
    function bla(){
    
    theDiv = document.getElementById('blaat');
    
        alert(theDiv);
    }
    
    </script>
</head>

<body>

<div id="blaat">
heej joh
</div>

<a href="#" onclick="bla();return false;">klik</a>

</body>
</html>

www.jurgroessen.nl


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

theDiv = document.getElementById('blaat');

word geladen voor die daadwerkelijk nog bestaat zodat hij null is. klopt.

code:
1
window.onload=function(){theDiv = docum.... }

[ Voor 30% gewijzigd door disjfa op 06-01-2004 16:50 ]

disjfa - disj·fa (meneer)
disjfa.nl


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 08:51

RM-rf

1 2 3 4 5 7 6 8 9

disjfa hat recht

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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>melpert</title>
    
    <script>
    function bla(){
        alert(theDiv);
    }
    </script>
</head>

<body>

<div id="blaat">
heej joh
</div>

<script> var theDiv = document.getElementById('blaat');</script>

<a href="#" onclick="bla();return false;">klik</a>

</body>
</html>

werkt natuurlijk ook

[ Voor 12% gewijzigd door RM-rf op 06-01-2004 16:53 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

en als je een variabele declareert, zet er dan netjes 'var' voor ;)

Intentionally left blank


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 03-02 22:51
ehm, ik roep die functie aan met een muisklik, en ik neem aan dat die div dan onderhand wel geladen is...en ook dat die global var theDiv dan wel geinitialiseerd is?

En crisp, als ik een global var wil dan moet ik var toch juist weglaten???

Moet ik nou echt opnieuw ingewerkt worden na 2 weken 8)7

www.jurgroessen.nl


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

Hangloozz schreef op 06 januari 2004 @ 16:56:
ehm, ik roep die functie aan met een muisklik, en ik neem aan dat die div dan onderhand wel geladen is...en ook dat die global var theDiv dan wel geinitialiseerd is?

En crisp, als ik een global var wil dan moet ik var toch juist weglaten???

Moet ik nou echt opnieuw ingewerkt worden na 2 weken 8)7
Nee, je vergeet dat JS buiten een functie al wordt uitgevoerd tijdens het parsen.
En vars declareren zonder var is vies; als je binnen een functie een variabele declareerd zonder var wordt het ook een global, maar dat is zo mogelijk nog viezer ;)

Intentionally left blank


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

1. script laat met theDiv erin. die is op dat moment dat je m definieerd leeg. null.
2. jij klikt op de link dan is de gedeclareerde theDiv nog steeds leeg

(3. tenzei je m definieerd als de pagina helemaal geladen is mbv jou vb. 2 of mijn window.onload)

disjfa - disj·fa (meneer)
disjfa.nl


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 08:51

RM-rf

1 2 3 4 5 7 6 8 9

Hangloozz schreef op 06 januari 2004 @ 16:56:
ehm, ik roep die functie aan met een muisklik, en ik neem aan dat die div dan onderhand wel geladen is...en ook dat die global var theDiv dan wel geinitialiseerd is?

En crisp, als ik een global var wil dan moet ik var toch juist weglaten???

Moet ik nou echt opnieuw ingewerkt worden na 2 weken 8)7
de variabele 'theDiv' bestaat wel maar is false, omdat op het moment dat hij gedeclareerd werd de 'getElementById-method ook false retourneerde.

een alert(false) geeft geheel geen resultaat, kijk maar eens naar alert(""+theDiv)

* RM-rf zucht en schud zijn hoofd, tssk, vandaag enkel heen en weer lopen tussen de koffieautomaat en de echte programmeurs, mn jongen .. ;)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 03-02 22:51
ik wordt gek...
Nou dan heb ik nog wel wat te doen voordat ik m'n ozo leuke scriptje kan gebruiken :(

anyway, bedankt 'echte programmeurs' :)

www.jurgroessen.nl


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

HTML:
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
27
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>melpert</title>
    
    <script>
    window.onload = function(){
         var theDiv = document.getElementById('blaat');
    }
    function bla(){
        alert(theDiv);
    }
    
    </script>
</head>

<body>

<div id="blaat">
heej joh
</div>

<a href="#" onclick="bla();return false;">klik</a>

</body>
</html>


meer is het niet hoor :)

disjfa - disj·fa (meneer)
disjfa.nl


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

RM-rf schreef op 06 januari 2004 @ 17:00:
[...]


de variabele 'theDiv' bestaat wel maar is false, omdat op het moment dat hij gedeclareerd werd de 'getElementById-method ook false retourneerde.

een alert(false) geeft geheel geen resultaat, kijk maar eens naar alert(""+theDiv)

* RM-rf zucht en schud zijn hoofd, tssk, vandaag enkel heen en weer lopen tussen de koffieautomaat en de echte programmeurs, mn jongen .. ;)
[mierenneuken]
volgens mij geeft het geen false maar null terug ;)
[/mierenneuken]

Intentionally left blank


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 03-02 22:51
mooi disjfa, alleen heb je nu een local theDiv gemaakt, en dat werkt niet :P
ff de var weg (sorry crisp) en het werkt.

alsnog bedankt voor het op weg helpen :)

www.jurgroessen.nl


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

Hangloozz schreef op 06 januari 2004 @ 17:17:
mooi disjfa, alleen heb je nu een local theDiv gemaakt, en dat werkt niet :P
ff de var weg (sorry crisp) en het werkt.

alsnog bedankt voor het op weg helpen :)
In dat geval zet ik buiten de functie alsnog:

JavaScript:
1
var theDiv;


zodat in ieder geval de variabele global gedeclareerd is. Bedenk daarbij dat een toewijzing aan een niet-gedeclareerde var intern in the JS-interpreter eigenlijk een warning genereerd wat gewoon performance kost.
Zie ook bijvoorbeeld deze tut over strict javascript warnings.

Intentionally left blank


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 03-02 22:51
yep, ik vat um :)
Wist ik eigenlijk al maar goed.. tijdelijk gevalletje Alzheimer..

www.jurgroessen.nl


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

om dezelfde reden ageer ik trouwens ook tegen RM -rf's false
Je ziet maar al te vaak dit soort constructies:

JavaScript:
1
2
3
4
var a = document.getElementById('blaat');
if (a) {
  // doe iets met a
}


strict genomen is null != false. Het is dat JS weaktyped is zodat null ook naar false wordt gecast in dit geval, maar mooi vind ik het niet; liever zo:

JavaScript:
1
2
3
4
var a = document.getElementById('blaat');
if (a != null) {
  // doe iets met a
}


en deze zie je zo mogelijk nog vaker (en genereerd in Mozilla ook echt een strictwarning):

JavaScript:
1
2
3
if (document.all) {
  // code voor IE
}


buiten het feit dat dit gewoon een ranzige manier van browserdetectie is zou je het strict genomen zo moeten doen:

JavaScript:
1
2
3
if (typeof document.all != 'undefined') {
  // code voor IE
}


:Y)

Intentionally left blank

Pagina: 1