DOM onKeyup-event variabele toevoegen

Pagina: 1
Acties:

  • SimonBlok
  • Registratie: Maart 2006
  • Nu online
Beste mensen,
Ik zit met een, voor mij nogal vaag, probleem. In een for-loopje maak ik nieuwe Input-elementen aan, hier geef ik een onKeyup-event aan, in dit event roep ik een functie aan die ik een variabele meegeef.
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
function initPage(){
    var rootContainer = document.getElementById('main_div')
    var elementen = rootContainer.getElementsByTagName('div')
    for(i=0;i<=elementen.length - 1;i++){
        if(elementen[i].className == 'BusinessElement'){
            var font = elementArray[i].elementfont
            var fontMaat = elementArray[i].elementfontsize
            var waardevalue = elementen[i].firstChild.nodeValue
            elementen[i].removeChild(elementen[i].firstChild)
            var textReplace = elementen[i].appendChild(document.createElement('img'))
            textReplace.src='fontreplacer.php?text=' + waardevalue + '&font=' + font + '&size=' + fontMaat
            textReplace.id = waardevalue + '_img'           
            if(elementArray[i].elementtype == 'var'){
                var inputContainer = document.getElementById('input_fields')
                inputContainer.appendChild(document.createTextNode(waardevalue + ': '))
                var newInput = document.createElement('input')
                newInput.type = 'text'
                newInput.id = waardevalue + '_input'
                newInput.value = waardevalue
                newInput.onkeyup = function(){changeImage(waardevalue,font,fontMaat)}               
                inputContainer.appendChild(newInput)
                inputContainer.appendChild(document.createElement('br'))                
            }           
        }
    }
}

Nu wordt er bij alle elementen dezelfde variabele meegegeven, namelijk de laatste uit de array. Heeft er iemand een idee hoe dit kan? Alvast hartelijk bedankt!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:10

crisp

Devver

Pixelated

Omdat het een referentie is naar dezelfde variabele in de buitenste scope (closure). Je zal ze dus apart moeten scopen, bijvoorbeeld met een extra functie:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function initPage()
{
  // ...
  newInput.onkeyup = createOnkeyUpFunction(waardevalue,font,fontMaat);
  // ...
}

function createOnkeyUpFunction(waardevalue,font,fontMaat)
{
  return function()
  {
    changeImage(waardevalue,font,fontMaat);
  }
}

}

Intentionally left blank


  • SimonBlok
  • Registratie: Maart 2006
  • Nu online
Hartstikke bedankt...het werkt!