Visualizzazione dei risultati da 1 a 10 su 10

Discussione: attachEvent e this

  1. #1

    attachEvent e this

    Mi pare strano che me ne sia accorto solo ora...
    Parlo di questo:

    codice:
    window.onload=function() {
      document.getElementsByTagName("*")[0].attachEvent("onclick", function() {
         alert(!!this.setTimeout); //Ritorna true!
      });
    }
    In parole povere IE esegue tutti i listener aggiunti con attachEvent con scope window.


    E che cavolo ( scusate il linguaggio non proprio adatto ), possibile che ad ogni listener devo usare un call?
    Il bello è che non si può manco fixare il metodo con un banale prototype...

    Sto IE è proprio una barzelletta

  2. #2
    Mi sa che l'unica cosa da fare è adottare una soluzione del genere...
    codice:
    $addListener = function(obj, ev, lis) {
    
    	//Fix per lo scope di IE
    	lisnew = window.attachEvent 
                 ? function() { lis.call(obj); } 
                 : lis;
    
           //Aggiunge il listener
            if(obj.addEventListener) //W3C
    		obj.addEventListener(ev, lisnew, 0); 
    	else if(obj.attachEvent) //IE
    		obj.attachEvent("on"+ev, lisnew); 
    	
    }

  3. #3
    Ciao.
    Scusa se non intervengo sul titolo
    del thread ma ti segnalo questo:
    Codice PHP:
    function addEvent(elmevTypefnuseCapture){
    alert(elm.addEventListener);
        if (
    elm.addEventListener){
                
    elm.addEventListener(evTypefnuseCapture);
                
    //return true;
        
    } else if (elm.attachEvent) {
            var 
    elm.attachEvent('on' evTypefn);
            
    //return r;
        

    alert(elm.attachEvent);
    }; 
    Opera senza i return becca tutti e due i metodi
    e se mi ricordo bene combina un po di c........



    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  4. #4
    Originariamente inviato da whisher
    Ciao.
    Scusa se non intervengo sul titolo
    del thread ma ti segnalo questo:
    Codice PHP:
    function addEvent(elmevTypefnuseCapture){
    alert(elm.addEventListener);
        if (
    elm.addEventListener){
                
    elm.addEventListener(evTypefnuseCapture);
                
    //return true;
        
    } else if (elm.attachEvent) {
            var 
    elm.attachEvent('on' evTypefn);
            
    //return r;
        

    alert(elm.attachEvent);
    }; 
    Opera senza i return becca tutti e due i metodi
    e se mi ricordo bene combina un po di c........



    Per la serie document.all...
    Grazie della segnalazione wisher!

    Cmq per chi volesse farsi quattro risate ( non si può fare altro vista la situazione tragicomica ), può provare a eseguire questo script su IE 6 ( il 7 non so se fa lo stesso errore ):
    codice:
    <html>
    <head>
    <script type="text/javascript">
    window.attachEvent("onload", function() { alert("primo listener"); })
    window.attachEvent("onload", function() { alert("secondo listener"); })
    window.attachEvent("onload", function() { alert("terzo listener"); })
    window.attachEvent("onload", function() { alert("quarto listener"); })
    </script>
    </head>
    <body>
    </body>
    </html>
    Tutto ciò non ha alcun senso VVoVe:
    Persino su Opera attachEvent funziona perfettamente senza fare errori di questo genere...

  5. #5
    Originariamente inviato da Mega69
    Per la serie document.all...
    Grazie della segnalazione wisher!

    Cmq per chi volesse farsi quattro risate ( non si può fare altro vista la situazione tragicomica ), può provare a eseguire questo script su IE 6 ( il 7 non so se fa lo stesso errore ):
    codice:
    <html>
    <head>
    <script type="text/javascript">
    window.attachEvent("onload", function() { alert("primo listener"); })
    window.attachEvent("onload", function() { alert("secondo listener"); })
    window.attachEvent("onload", function() { alert("terzo listener"); })
    window.attachEvent("onload", function() { alert("quarto listener"); })
    </script>
    </head>
    <body>
    </body>
    </html>
    Tutto ciò non ha alcun senso VVoVe:
    Persino su Opera attachEvent funziona perfettamente senza fare errori di questo genere...


    Sbaglierò ma mi sembra che di
    senso ne abbia questo esempio funziona con FF Opera
    IE e Safari (3.0 beta win)

    Codice PHP:
    function addEvent(elmevTypefnuseCapture){

        if (
    elm.addEventListener){
                
    elm.addEventListener(evTypefnuseCapture);
                return 
    true;
        } else if (
    elm.attachEvent) {
            var 
    elm.attachEvent('on' evTypefn);
            return 
    r;
        } 
    };
    function 
    prova1(){
    alert('Prova 1');
    }
    function 
    prova2(){
    alert('Prova 2');
    }
    function 
    prova3(){
    alert('Prova 3');
    }
    addEvent(window,'load',prova1,false);
    addEvent(window,'load',prova2,false);
    addEvent(window,'load',prova3,false); 
    Se vuoi caricare + scripts in una pagina
    mi sembra il minimo


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  6. #6
    Originariamente inviato da whisher
    Sbaglierò ma mi sembra che di
    senso ne abbia questo esempio funziona con FF Opera
    IE e Safari (3.0 beta win)

    Codice PHP:
    function addEvent(elmevTypefnuseCapture){

        if (
    elm.addEventListener){
                
    elm.addEventListener(evTypefnuseCapture);
                return 
    true;
        } else if (
    elm.attachEvent) {
            var 
    elm.attachEvent('on' evTypefn);
            return 
    r;
        } 
    };
    function 
    prova1(){
    alert('Prova 1');
    }
    function 
    prova2(){
    alert('Prova 2');
    }
    function 
    prova3(){
    alert('Prova 3');
    }
    addEvent(window,'load',prova1,false);
    addEvent(window,'load',prova2,false);
    addEvent(window,'load',prova3,false); 
    Se vuoi caricare + scripts in una pagina
    mi sembra il minimo


    Ma l'hai provato con IE 6?

    Il delirio che volevo mettere in evidenza è che IE esegue i listener in un ordine tutto suo; ecco quello che mi compare eseguendo lo script su IE6:
    Prova 3
    Prova 2
    Prova 1

    E in questo caso siamo stati fortunati perchè si è solo limitato a invertirli; se eseguivi lo script che ho postato prima sarebbe comparso questo:
    terzo listener
    quarto listener
    primo listener
    secondo listener

    Possibile che succede solo a me?

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    Originariamente inviato da Mega69
    Possibile che succede solo a me?
    no, ma non e' una novita'

  8. #8
    Originariamente inviato da Xinod
    no, ma non e' una novita'
    Questo è ovvio, mica ho detto che l'ho scoperto io

    Ma su IE 7 succede lo stesso?

  9. #9
    Originariamente inviato da Mega69
    Ma l'hai provato con IE 6?

    Il delirio che volevo mettere in evidenza è che IE esegue i listener in un ordine tutto suo; ecco quello che mi compare eseguendo lo script su IE6:
    Prova 3
    Prova 2
    Prova 1

    E in questo caso siamo stati fortunati perchè si è solo limitato a invertirli; se eseguivi lo script che ho postato prima sarebbe comparso questo:
    terzo listener
    quarto listener
    primo listener
    secondo listener

    Possibile che succede solo a me?

    Adesso ho colto il senso !



    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #10
    Originariamente inviato da whisher
    Adesso ho colto il senso !



    Ci credo che ti sfuggiva, tutto ciò ha così poco senso che non ce se lo aspetterebbe nemmeno da IE

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.