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

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
addEventListener() mm.
Fra : Jonas Koch Bentzen


Dato : 25-04-03 22:49

Jeg har et lidt kompliceret problem med et stykke kode, der er gengivet
lidt forenklet her:

function Klasse() {
   this.variabel = "Noget"

   this.metode = function(handling) {
      alert(this.variabel)
   }

   this.metode2 = function() {
      element = document.createElement('span')
      element.addEventListener('click', this.metode, false)
      element.appendChild(document.createTextNode('Test'))
   }
}


objekt = new Klasse()
document.body.appendChild(this.metode2())

Problemet her er, at når jeg klikker på det span-element, der dannes i
metode2(), så kaldes metode() rigtigt nok - men this.variabel er ikke
tilgængelig ("has no properties", som Mozilla 1.3's JavaScript-konsol
siger). Hvis jeg kalder metoden direkte (objekt.metode()), er der ingen
problemer. Hvad kan problemet skyldes?


 
 
Jonas Koch Bentzen (25-04-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 25-04-03 22:55

Jonas Koch Bentzen wrote:
>
> document.body.appendChild(this.metode2())

Skulle have været

document.body.appendChild(objekt.metode2())


Jonas Koch Bentzen (25-04-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 25-04-03 22:58

Jonas Koch Bentzen wrote:
>
> this.metode2 = function() {
> element = document.createElement('span')
> element.addEventListener('click', this.metode, false)
> element.appendChild(document.createTextNode('Test'))

.... og her mangler en

return element

> this.variabel er ikke
> tilgængelig ("has no properties", som Mozilla 1.3's JavaScript-konsol
> siger).

Okay, faktisk alerter den bare "undefined" ud, men forskellen er den samme.


Torben Brandt (26-04-2003)
Kommentar
Fra : Torben Brandt


Dato : 26-04-03 12:37

Jonas Koch Bentzen wrote:
> Jeg har et lidt kompliceret problem med et stykke kode, der er gengivet
> lidt forenklet her:
>
> function Klasse() {
> this.variabel = "Noget"

Fjern linien herover.

>
> this.metode = function(handling) {
> alert(this.variabel)
> }
>
> this.metode2 = function() {
> element = document.createElement('span')

Indsæt denne linie her:
element.variabel = "Noget andet"


> element.addEventListener('click', this.metode, false)
> element.appendChild(document.createTextNode('Test'))
> }
> }
>
>
> objekt = new Klasse()
> document.body.appendChild(this.metode2())
>
> Problemet her er, at når jeg klikker på det span-element, der dannes i
> metode2(), så kaldes metode() rigtigt nok - men this.variabel er ikke
> tilgængelig ("has no properties", som Mozilla 1.3's JavaScript-konsol
> siger). Hvis jeg kalder metoden direkte (objekt.metode()), er der ingen
> problemer. Hvad kan problemet skyldes?
>

Jeg har rettet i din kode herover (ændringer fra dine andre indlæg skal
naturligvis også med)
Så virker det i Mozilla. Jeg ved ikke om det er "den rigtige måde at
gøre det på...)

PS Min IE6 vil ikke kendes ved addEventListener-funktionen.

Torben


Jonas Koch Bentzen (26-04-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-04-03 12:56

Torben Brandt wrote:
> Jonas Koch Bentzen wrote:
>
>> Jeg har et lidt kompliceret problem med et stykke kode, der er
>> gengivet lidt forenklet her:
>>
>> function Klasse() {
>> this.variabel = "Noget"
>
>
> Fjern linien herover.

Den skal jeg nu bruge...

>> element = document.createElement('span')
>
>
> Indsæt denne linie her:
> element.variabel = "Noget andet"

Dér brugte jeg bare

element.variabel = this.variabel

Og det virker fint. Mange tak for hjælpen.

> PS Min IE6 vil ikke kendes ved addEventListener-funktionen.

addEventListener() er standard (en del af DOM), men nu er IE jo ikke
ligefrem kendt for at understøtte standarderne særligt godt. Det, jeg
plejer at gøre, er følgende:

try {
   element.addEventListener("change", enFunktion, false)
}
catch (fejl) {
   element.onchange = enFunktion
}

Først prøver man med standardmetoden (addEventListener()), og virker det
ikke, prøver man så med onchange, der ikke er standard, men dog virker i IE.


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste