[JS] parent object kopieren werkt niet in IE

Pagina: 1
Acties:

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik ben bezig met een Autofill script dat OOP werkt en in FF werkt alles precies zo als ik wil. Ik heb een input veld en daar hang ik een onkeyup eventhandler aan met als attributen een xmlfile, css stijl en wat kleine dingen die het tot een werkend geheel maken. Snel in te bouwen dus.

Echter in IE wil er iets niet lukken en ik zit er nu al een tijdje op stuk maar wil het (natuurlijk) graag werkend hebben in beide browsers. Ik zal even de relevante code plaatsen, let op dat dit het meeste mist maar dat is voor dit topic niet erg.

JavaScript:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Autofill een input element
function Autofill(strId, strXmlFile, strEvent, strBox, strStyle)
{
    // kopieer settings in het object
    this.strId = strId;
    // etc
        
    // vraag het element op
    this.objElement = document.getElementById(this.strId);
    
    
    // kopper de event handler eraan
    this.objElement.prnt = this;
    this.objElement.onkeyup = function(){ this.prnt.importXML(); }
}


// Laad de XML file
Autofill.prototype.importXML = function()
{

    // FF of IE ?
    if (document.implementation && document.implementation.createDocument)
    {
        // FF, werkt goed
        xmlDoc = document.implementation.createDocument("", "", null);
        xmlDoc.prnt = this;
        xmlDoc.onload = function(){ this.prnt.parseResult(); }
    }
    else if (window.ActiveXObject)
    {
        // IE, werkt niet
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.prnt = this; // deze regel gaat verkeerd, verder komt het script niet meer
        xmlDoc.onreadystatechange = function () {
            if (xmlDoc.readyState == 4) this.prnt.parseResult();
        };
    }
    else
    {
        alert('Your browser can\'t handle this script');
        return;
    }
    xmlDoc.load(this.strXmlFile);
}

// Parse de XML File
Autofill.prototype.parseResult = function()
{
    // afhandeling van de ingeladen xml file
}


Hoe kan ik dit oplossen zonder de parseResult functie te wijzigen, die werkt in FF namelijk gewoon zoals het moet. Ik zie het echt niet. Mn huisgenoot en wat collega's hebben er ook naar gekeken maar die zagen het ook niet terwijl t vast erg simpel is. Jullie een idee?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:12

crisp

Devver

Pixelated

Je kan aan een instance van een ActiveX object geen custom properties toekennen, maar dit is eenvoudig met een closure op te lossen:
JavaScript:
1
2
3
4
5
6
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
var instance = this;
xmlDoc.onreadystatechange = function ()
{
    if (xmlDoc.readyState == 4) instance.parseResult();
};

[ Voor 9% gewijzigd door crisp op 07-09-2006 20:28 ]

Intentionally left blank


  • Cartman!
  • Registratie: April 2000
  • Niet online
Wow, geweldig crisp! Ontzettend bedankt, duidelijk verhaal en n logische oplossing.