Der Wert von "this" innerhalb des Handlers mit addEventListener

Habe ich erstellt ein javascript-Objekt per prototyping. Ich bin versucht zu Rendern einer Tabelle dynamisch. Während der rendering-Teil ist einfach und funktioniert gut, ich muss auch mit bestimmten client-Seite Ereignisse für die dynamisch dargestellten Tabelle. Auch das ist einfach. Wo habe ich Probleme mit dem "this" - Referenz innerhalb der Funktion, die das Ereignis behandelt. Anstelle von "this" referenziert das Objekt, ist es, die Verweise auf das element, das das Ereignis ausgelöst hat.

Siehe code. Der problematische Bereich ist in "ticketTable.der Prototyp.handleCellClick = Funktion()"

function ticketTable(ticks)
{
    //tickets is an array
    this.tickets = ticks;
} 

ticketTable.prototype.render = function(element)
    {
        var tbl = document.createElement("table");
        for ( var i = 0; i < this.tickets.length; i++ )
        {
            //create row and cells
            var row = document.createElement("tr");
            var cell1 = document.createElement("td");
            var cell2 = document.createElement("td");

            //add text to the cells
            cell1.appendChild(document.createTextNode(i));
            cell2.appendChild(document.createTextNode(this.tickets[i]));

            //handle clicks to the first cell.
            //FYI, this only works in FF, need a little more code for IE
            cell1.addEventListener("click", this.handleCellClick, false);

            //add cells to row
            row.appendChild(cell1);
            row.appendChild(cell2);


            //add row to table
            tbl.appendChild(row);            
        }

        //Add table to the page
        element.appendChild(tbl);
    }

    ticketTable.prototype.handleCellClick = function()
    {
        //PROBLEM!!!  in the context of this function, 
        //when used to handle an event, 
        //"this" is the element that triggered the event.

        //this works fine
        alert(this.innerHTML);

        //this does not.  I can't seem to figure out the syntax to access the array in the object.
        alert(this.tickets.length);
    }

InformationsquelleAutor der Frage Darthg8r | 2009-08-27

Schreibe einen Kommentar