|
| 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.
| |
|
|