objectinstantie's worden onbedoelt overschreven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Citroen Anoniem Graag

Citroen Anoniem Graag

08/08/2010 00:03:34
Quote Anchor link
Hallo javascript guru's!

Ik ben een beetje met jQuery aan het leren omgaan.
Ik heb de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
getObject('xxx').focus(function(){
    if(getSpan('xxx').html() == '')
    {
        changeHtml('xxx', 'working');
    }
}).blur(function(){
    if(checkInput('xxx') == false)
    {
        changeHtml('xxx', 'error');
    }
}).keyup(function(){
    if(checkInput('xxx') == true)
    {
       changeHtml('xxx', 'correct');
    }
    else if(getSpan('xxx').hasClass('correct'))
    {
        changeHtml('xxx', 'error');
    }                    
});


deze code moet 5x worden uitgevoerd,elke keer met een andere tekst op de plaats van xxx.
Nu kan ik gewoon 5x hetzelfde code blok onder elkaar zetten en werkt het. Maar dat vind ik vrij achterlijk werk, hier zijn de loop voor bedacht!

Toen kwam ik op een volgende constructie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
velden = new Array('veld 1', 'veld 2');  // etc tm 5

for(veld in velden)
{
    name = velden[veld];
    getObject(name).focus(function(){
        if(getSpan(name).html() == '')
        {
            changeHtml(name, 'working');
        }
    }).blur(function(){
        if(checkInput(name) == false)
        {
            changeHtml(name, 'error');
        }
    }).keyup(function(){
        if(checkInput(name) == true)
        {
           changeHtml(name, 'correct');
        }
        else if(getSpan(name).hasClass('correct'))
        {
            changeHtml(name, 'error');
        }                    
    });                  
}


Helaas onthoudt hij op die manier alleen maar de laatste instantie.. alleen de functie's voor veld 5 werken dus. Hoe los ik dit op?

Gr
 
PHP hulp

PHP hulp

24/10/2020 02:12:36
 
Citroen Anoniem Graag

Citroen Anoniem Graag

12/08/2010 15:16:50
Quote Anchor link
Bumpje
 
Jelmer -

Jelmer -

12/08/2010 15:19:04
Quote Anchor link
Je moet 'var' gebruiken voor je een variabele wilt maken. Anders ziet hij het als window.velden, window.veld en window.name, en die overschijf je dan dus constant. 'var' is Javascript's manier van een nieuwe variabele introduceren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
var velden = ['veld 1', 'veld 2'];

for(var veld in velden) {
    var name = velden[veld];
}


edit: inderdaad, wat hieronder staat. name wordt verbonden aan de scope van al je functies die je hier maakt, waardoor al die name variabelen naar hetzelfde stukje geheugen verwijzen, en ze dus alleen de laatste waarde uit de velden-array hebben.
Gewijzigd op 12/08/2010 15:23:52 door Jelmer -
 
P Lekensteyn

P Lekensteyn

12/08/2010 15:19:46
Quote Anchor link
name verwijst hier naar de variable 'name', en niet de waarde. (changeHtml).
Een oplossing is het maken van een functie waardoor name niet verandert:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
var velden = new Array('veld 1', 'veld 2');  // etc tm 5
var dingesfunctie = function(name){
    getObject(name).focus(function(){
        if(getSpan(name).html() == '')
        {
            changeHtml(name, 'working');
        }
    }).blur(function(){
        if(checkInput(name) == false)
        {
            changeHtml(name, 'error');
        }
    }).keyup(function(){
        if(checkInput(name) == true)
        {
           changeHtml(name, 'correct');
        }
        else if(getSpan(name).hasClass('correct'))
        {
            changeHtml(name, 'error');
        }                    
    });
};
for(veld in velden)
{
    dingesfunctie(velden[veld]);
}


Toevoeging op 12/08/2010 15:21:28:

Jelmer rrrr op 12/08/2010 15:19:04:
Je moet 'var' gebruiken voor je een variabele wilt maken. Anders ziet hij het als window.velden, window.veld en window.name, en die overschijf je dan dus constant. 'var' is Javascript's manier van een nieuwe variabele introduceren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
var velden = ['veld 1', 'veld 2'];

for(var veld in velden) {
    var name = velden[veld];
}


+1 voor de var, maar om de een of andere manier krijg ik bij sommige constructies het nog steeds niet werkend.
Dat heb ik ondervonden bij XMLHttpRequest.
Mijn laatst genoemde oplossing werkte wel.
Misschien niet helemaal overzichtelijk, maar het werkt :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.