Visualizzazione dei risultati da 1 a 4 su 4

Discussione: addEventListener

  1. #1

    addEventListener

    ho appena finito di implementare una sorta di menu dinamico e volevo assegnare ad ogni voce di un sottomenu un certo comportamento definito da un evento. Aggiungo gli eventi che voglio rilevare grazie a addEventListener, ma funziona "per metà".

    codice:
    var items= window.document.getElementsByClassName("Item");  // la classe di ogni voce del sottomenu
        	  	var index= 0;
        	  	
        	  	for( var i= 0; i < items.length; ++i )
    			{	
    				index= i;
    				
    				items[i].addEventListener("mouseenter", function(){
    					items[index].style.background= "rgba(255, 255, 255, 0.3 )";
    				}, false );
    				
    				items[i].addEventListener("mouseleave", function(){
    					items[index].style.background= "black";
    				}, false );
    			}
    le voci sono solo due ma gli eventi funzionano solamente con la seconda voce, anzi anche il comportamento della seconda è strano:

    - quando il mouse entra nella prima voce si attiva l'evento onmouseenter della seconda voce
    - ma solo quando il mouse esce da entrambe le voci si attiva l'evento onmouseleave della seconda voce

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    prova a riferirti all'elemento con this anziché con items[index]...

    Provo a spiegarti perché (considera questa lista una "linea del tempo")

    1. Inizia il ciclo for
    2. index vale 0
    3. seconda "passata" del ciclo
    4. index vale 1
    5. Entro od esco con il mouse su un elemento
    6. Si scatena l'evento
    7. codice:
      items[index]
      ma quanto vale index? (vai a vedere al punto 4)


    Quindi
    codice:
    var items = document.getElementsByClassName("Item");  // la classe di ogni voce del sottomenu
    for (var i= 0; i < items.length; ++i) {
        items[i].addEventListener("mouseenter", function(){
            this.style.background= "rgba(255, 255, 255, 0.3 )";
        }, false );
        items[i].addEventListener("mouseleave", function(){
            this.style.background= "black";
        }, false );
    }
    Ultima modifica di tampertools; 05-06-2014 a 17:18
    No

  3. #3
    grazie mille! non ci avevo pensato a quello.

    comunque ho già risolto in un altro modo usando jquery:

    codice:
    $('.Item').bind("mouseenter", function(){
    					$(this).css("background", "rgba(255, 255, 255, 0.3 )");
    				});
    				
    				$('.Item').bind("mouseleave", function(){
    					$(this).css("background", "black");
    			        });
    grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Puoi ancora abbreviare così
    codice:
    $('.Item').mouseenter(function(){
        $(this).css("background", "rgba(255, 255, 255, 0.3 )");
    });
    
    
    $('.Item').mouseleave(function(){
        $(this).css("background", "black");
    });
    No

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.