[JS] delete myDiv.property geeft IE7 foutmelding

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Als ik een property van een DOM element probeer te deleten in Internet Explorer 7, geeft dat een foutmelding "Object doesn't support this action". In FF/GC gaat het echter goed. Hoe kan dit? Is het een IE-bug?

Het gaat bijv. om volgende stukje code

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<body>

<script type="text/javascript">
var myDiv= document.createElement('div');
myDiv.innerHTML = 'hello world'

myDiv.variabele = 3;
document.body.appendChild(myDiv);

alert(myDiv.variabele); //3 in IE/FF
delete myDiv.variabele; //foutmelding in IE
alert(myDiv.variabele); //3 in FF
</script>

</body>
</html>


Ik heb http://perfectionkills.com/understanding-delete/ proberen te begrijpen, maar ik zie geen verband met deze foutmelding.

Ik vraag het omdat in 'variabele' in mijn webapp een referentie is naar een te verwijderen object.

[ Voor 6% gewijzigd door Rekcor op 19-11-2010 09:57 . Reden: Vraag ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31
delete is erg onbetrouwbaar, zeker in IE

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:58

crisp

Devver

Pixelated

Referenties naar DOM-elementen zijn in IE (< 9) binnen javascript geen native objects maar 'host objects' (zie: http://blogs.msdn.com/b/i...ced-dom-capabilities.aspx) dus een hoop javascript features werken daar niet op (waaronder de delete method).

Referenties naar andere objecten als property van een DOM-element is overigens een recept voor memory-leaks in IE.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
crisp schreef op vrijdag 19 november 2010 @ 10:10:
Referenties naar DOM-elementen zijn in IE (< 9) binnen javascript geen native objects maar 'host objects' (zie: http://blogs.msdn.com/b/i...ced-dom-capabilities.aspx)
Maar dit is geen referentie naar een DOM-element, maar een referentie van een DOM element naar een Javascript object. Geldt het daarvoor ook? Of doel jij met 'Referenties naar DOM-elementen' op 'myDiv'?
crisp schreef op vrijdag 19 november 2010 @ 10:10:
Referenties naar andere objecten als property van een DOM-element is overigens een recept voor memory-leaks in IE.
Weet ik, en daarom probeerde ik dus alle referenties expliciet te verwijderen van het DOM-object richting andere objecten (deze code staat in mijn onbeforedelete functie :).

Maar hoe moet ik myDiv.variabele dan verwijderen (gegeven het feit dat variabele een Javascript object is)?

Dank trouwens voor je reactie!

[ Voor 8% gewijzigd door Rekcor op 19-11-2010 10:49 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:58

crisp

Devver

Pixelated

Rekcor schreef op vrijdag 19 november 2010 @ 10:47:
[...]


Maar dit is geen referentie naar een DOM-element, maar een referentie van een DOM element naar een Javascript object. Geldt het daarvoor ook? Of doel jij met 'Referenties naar DOM-elementen' op 'myDiv'?
ik bedoel dat myDiv een referentie naar een DOM-element is, en dat dat in IE dus geen native JS object is.
[...]


Weet ik, en daarom probeerde ik dus alle referenties expliciet te verwijderen van het DOM-object richting andere objecten (deze code staat in mijn onbeforedelete functie :).

Maar hoe moet ik myDiv.variabele dan verwijderen (gegeven het feit dat variabele een Javascript object is)?
Gewoon nullifyen lijkt me: myDiv.variabele = null;

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
crisp schreef op vrijdag 19 november 2010 @ 10:57:
Gewoon nullifyen lijkt me: myDiv.variabele = null;
Maar dan is mijn object (waarnaar myDiv.variabele verwijst) toch direct genullified/dood/vermorzeld/vernietigd? Dat lijkt me niet wenselijk, dat een listener van het onbeforedelete event van een object, het object vernietigt. Er zijn nog meer listeners die dingen willen doen onbeforedelete.

Dank! Ik zal 'delete' vermijden en gewoon alles nullifyen.

[ Voor 6% gewijzigd door Rekcor op 19-11-2010 11:37 . Reden: Eerst Javascript for dummies nog maar eens lezen :) ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:58

crisp

Devver

Pixelated

Rekcor schreef op vrijdag 19 november 2010 @ 11:10:
[...]


Maar dan is mijn object (waarnaar myDiv.variabele verwijst) toch direct genullified/dood/vermorzeld/vernietigd?
Nee hoor:
JavaScript:
1
2
3
4
5
6
7
8
var myDiv = {};
var myObject = { foo: 'bar' }

myDiv.prop = myObject;
myDiv.prop.foo = 'woei';

myDiv.prop = null;
alert(myObject.foo);

[ Voor 19% gewijzigd door crisp op 19-11-2010 11:21 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
crisp schreef op vrijdag 19 november 2010 @ 11:20:
[...]

Nee hoor:
JavaScript:
1
2
3
4
5
6
7
8
var myDiv = {};
var myObject = { foo: 'bar' }

myDiv.prop = myObject;
myDiv.prop.foo = 'woei';

myDiv.prop = null;
alert(myObject.foo);
Was ik zelf ook achter gekomen :-).

Het begrip 'referentie' is gewoon blijkbaar nog niet helemaal geland in mijn interne systeem: enerzijds zou je kunnen zeggen 'de referentie is het object zelf' (want je kunt bijv. de properties van het gerefereerde object gewoon aanspreken met referentie.property), anderzijds is een referentie naar het object iets wat losstaat van het object.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Rekcor schreef op vrijdag 19 november 2010 @ 11:40:
[...]


Was ik zelf ook achter gekomen :-).

Het begrip 'referentie' is gewoon blijkbaar nog niet helemaal geland in mijn interne systeem: enerzijds zou je kunnen zeggen 'de referentie is het object zelf' (want je kunt bijv. de properties van het gerefereerde object gewoon aanspreken met referentie.property), anderzijds is een referentie naar het object iets wat losstaat van het object.
Nee, je kunt niet zeggen "de referentie is het object zelf"; dat is het hele idee van een referentie. Je kunt bijv. wel een referentie verwijderen, maar daarmee verwijder je dus slechts.. de referentie.
Pagina: 1