[js] OO en AddEventListener, werkt niet in IE6

Pagina: 1
Acties:

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18-04 05:37

alienfruit

the alien you never expected

Topicstarter
Ik ben bezig geweest met een website waarbij je items kan selecteren door op de TR te klikken van de tabel. Dit werkt allemaal prima in Firefox en Safari. Maar als ik het uit probeer in IE6/Windows werkt het niet. Nu heb ik gelezen dat addEventListener niet ondersteund wordt door IE6. Daarom heb ik de functie gemaakt/gekopieerd:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function _attachEvent( srcObject, eventName, eventHandlerMethod, catcher ) {
    if ( !catcher ) catcher = false;
    
    if ( !srcObject ) return false;
    
    if ( srcObject.addEventListener ) {
        // The non-Internet Explorer browser way of registering event...
        srcObject.addEventListener( eventName, eventHandlerMethod, catcher );
        return true;
    } else if ( srcObject.attachEvent ) {
        // Internet Explorer 6 way of registering event...
        srcObject.attachEvent( "on" + eventName, eventHandlerMethod );
    } else {
        // even older browsers are not support <g>
        return false;
    }
}


Ik gebruik de onderstaande code om het allemaal aan de praat te krijgen, alleen het werkt dus niet onder IE6. Iemand enig idee wat ik fout doe?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var table_selector = {

    initialise: function() {
                 var rows = document.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
                 for ( var i=0; i < rows.length; i++ ) {
                       var row = rows[i];
                       attachEvent( row, "click", table_selector.click );
                 }
        },
 
        click: function(e) {
               alert( this.tagName ); // moet TD laten zien
         },

        cancel: function(e) {
        }
}

 attachEvent( window, "load", table_selector.initialise );

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

attachEvent draait niet binnen de scope van het object; 'this' verwijst dus naar je window object ;)
Zie o.a. ook de discussie hier naar aanleiding van welke ik samen met Dean Edwards uiteindelijk tot deze generieke addEvent() functie ben gekomen...

Intentionally left blank


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18-04 05:37

alienfruit

the alien you never expected

Topicstarter
Bedankt, ik zal het zo eens gaan lezen.

Cool! Nu werkt het wel! Hartstikke bedankt!

[ Voor 41% gewijzigd door alienfruit op 11-12-2005 17:24 ]