gestione eventi con addEventListener,comportamento strano dell'handle

blows83

Nuovo Utente
15 Gen 2016
3
0
0
Salve a tutti ragazzi sono nuovo del forum(chiedo scusa in anticipo per eventuali errori)....
Ho creato una classe Menu in javascript che preso come parametro un valore "name"attribuito a piu tag crea un menu interattivo,quando istanzio il menu attribuisco dei valori a variabili private in più aggiungo gli handles all'evento "click" per ogni elemento del menu e fin qui tutto bene,la classe ha delle funzioni che mi permetto di cambiare i colori delle scritte dello sfondo ecc,il problema si presenta proprio qui perchè quando cambio colore a menu gia creato gli handle fanno riferimento sempre ai colori di default che vengono attribuiti al momento della creazione del menu,posto codice classe e vi ringrazio anticipatamente....

Codice:
function Menu(vettoremenu,colore,coloreselezione) {
                
     var coloreprivato,coloreselezioneprivato,coloresfondoprivato,coloresfondoselezioneprivato;
     var elementocliccato=null;
    
    //code
    if (colore==null) {
        coloreprivato='black';
          
    }
    else coloreprivato=colore;
    
    if (coloreselezione==null) {
        coloreselezioneprivato='gold';
    }
    else coloreselezioneprivato=coloreselezione;
    
    coloresfondoprivato="transparent";
    coloresfondoselezioneprivato="transparent";
    this.lista=menu=document.getElementsByName(vettoremenu);
    
    
    this.getcolore=function(){return coloreprivato;};
    this.getcoloreselezione=function(){return coloreselezioneprivato;};
    this.setcolore=function(colore){this.coloreprivato=colore;};
    this.setcoloreselezione=function(coloreselezione){coloreselezioneprivato=coloreselezione;};
    this.setcoloresfondoselezione=function(coloreselezione){coloresfondoselezioneprivato=coloreselezione;};
    this.setcoloresfondo=function(coloresfondo){coloresfondoprivato=coloresfondo;
                                                for(i=0;i<menu.length;i++){
                                                menu[i].setAttribute("onMouseEnter","this.style.backgroundColor="+'\''+coloresfondo+'\''+";");
                                                menu[i].setAttribute("onMouseLeave","this.style.backgroundColor='transparent';");
                                                }};
    this.getcoloresfondo=function(){return coloresfondoprivato;};
    this.getcoloresfondoselezione=function(){return coloresfondoselezioneprivato;};
    
    cambiacoloremenu=function(precedente){
         if(elementocliccato==null){ 
              if (typeof(precedente)=="object") {
                 precedente.style.color=coloreselezioneprivato;
                 precedente.setAttribute("onMouseLeave","this.style.backgroundColor="+'\''+coloresfondoselezioneprivato+'\''+";");
                 precedente.setAttribute("onMouseEnter","this.style.backgroundColor="+'\''+coloresfondoselezioneprivato+'\''+";");
                 elementocliccato=precedente;
               
              }
             else{ 
                 
                  return null;
            }
           }
           else{
            alert(coloreprivato);
           precedente.style.color=coloreselezioneprivato;
           elementocliccato.style.color=coloreprivato;
           precedente.setAttribute("onMouseLeave","this.style.backgroundColor="+'\''+coloresfondoselezioneprivato+'\''+";");
           precedente.setAttribute("onMouseEnter","this.style.backgroundColor="+'\''+coloresfondoselezioneprivato+'\''+";");
           elementocliccato.setAttribute("onMouseEnter","this.style.backgroundColor="+'\''+coloresfondoprivato+'\''+";")
           elementocliccato.setAttribute("onMouseLeave","this.style.backgroundColor='transparent';");
           elementocliccato.style.backgroundColor="transparent";
           elementocliccato=precedente;
           }
           };
    
    
    
  
   
    for(var i=0;i<menu.length;i++){
             if(menu[i].tagName=='A'||menu[i].tagName=='a'){
              menu[i].setAttribute("href","javascript: void(0)");
              }      
        menu[i].addEventListener("click",function prova(event){cambiacoloremenu(this);});
        menu[i].setAttribute("color",coloreprivato);
        menu[i].setAttribute("onMouseLeave","this.style.backgroundColor='transparent';");
    }


 
 
this.loadancore=function(vettorecollegamenti){  
       elementi=document.getElementsByName(vettorecollegamenti);
         
       if(elementi.length!=menu.length){
              elert("errore nel collegamento menu");
              return -1;
              }
              
    else{
      for(i=0;i<menu.length;i++){
          
         pro=menu[i].getAttribute("onclick"); 
         //pro+="window.scrollTo(0,"+elementi[i].offsetTop+");";
      
         menu[i].addEventListener("click",function(event){sposta(elementi[i].id);});
         //menu[i].setAttribute("onclick",pro);
         }
         return 0;
       }     
              
     };
  
}
 
Ultima modifica di un moderatore:

blows83

Nuovo Utente
15 Gen 2016
3
0
0
ho notato che il problema si accentua se istanzio altri oggetti dalla classe menù,mi sta venendo in mente che javascript non sia adattisimo per la programmazione ad oggetti ma se penso a jquery o ad ajax torno sulla terra e credo che il problema sia io
 

blows83

Nuovo Utente
15 Gen 2016
3
0
0
problema risolto...ci sono alcune variabili nella classe che non essendo dichiarate con la parola chiave var vengono interpretate globali e quindi creando un nuovo oggetto menu andavano a sovrascriversi
 
Discussioni simili
Autore Titolo Forum Risposte Data
C Cross-browser, problemi con la gestione degli eventi da tastiera Javascript 0
K Cerco script php gestione eventi con tasti PHP 6
Jonn [WordPress] Gestione categorie e tags per sito eventi WordPress 2
P Gestione Eventi in Java, architettura UNO per OpenOffice Java 0
A Creazione cookie e gestione accessi PHP 0
B form gestione input PHP 2
sbolde91 Consiglio gestione Hosting Hosting 2
E Gestione profilo utente tramite Form PHP 3
S cerco esperto gestione ecommerce Offerte e Richieste di Lavoro e/o Collaborazione 0
P Curiosità su grandi aziende e la gestione delle grafiche. Discussioni Varie 1
M Consiglio sulla gestione di Gerarchie Database 0
A attributo "min" per input gestione date PHP 8
L Gestione DB ASP.NET 2
L Consiglio SEO gestione dominio + free hosting SEO e Posizionamento 3
G [PHP] gestione mouse PHP 2
B Gestione Prenotazioni con Mysql Database 21
D CREAZIONE E GESTIONE SITO E-COMMERCE Offerte e Richieste di Lavoro e/o Collaborazione 2
P (Cerco) Collaboratori per gestione social media Offerte e Richieste di Lavoro e/o Collaborazione 5
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
brasoft2019 [PHP] Sistema di gestione presenze PHP 29
W Preventivo gestione ecommerce Discussioni Varie 1
E Cerco partner / socio per gestione sito di annunci incontri Offerte e Richieste di Lavoro e/o Collaborazione 0
K e-commerce per distribuzione e dettaglio con gestione magazzino E-Commerce 0
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
felino Gestione dispositivi e Altri dispositivi Windows e Software 4
D Software per gestione account facebook? Social Media Marketing 1
D Cero Software Facebook gestione account Vendere e Acquistare pubblicita' online 0
M Offro servizio Incremento Follower e Gestione Profili Istagram Offerte e Richieste di Lavoro e/o Collaborazione 0
S elementi statistici - Matrice e Gestione Array PHP o Javascript Javascript 0
J [offro] hosting / installazione certificati ssl / gestione server Offerte e Richieste di Lavoro e/o Collaborazione 0
F [PHP] gestione meteo manuale per un gioco di ruolo PHP 1
bianca_dimulescu Gestione tabella e MySQL PHP 4
T Servizio gestione pagina Instagram Offerte e Richieste di Lavoro e/o Collaborazione 0
G Gestione e/o vendita hosting come libero professionista Leggi, Normative e Fisco 4
MatMac System [PHP] Gestione dinamica select-option PHP 3
xone [Vendo] Script gestionale php-mysql gestione pratiche Altri Annunci 0
S [PHP] Gestione coupon PHP 3
lxella [PHP] Aree riservate e gestione utenti PHP 1
D Gestione punteggi php PHP 1
B Cercasi socio per gestione sito web Offerte e Richieste di Lavoro e/o Collaborazione 0
G gestione pagina facebook Social Media Marketing 0
Cavalinho08 [Offro gestione pagine instagram, prezzo bassissimo] Annunci servizi di Social Media Marketing 3
D [VENDO] Gestione account instagram Annunci servizi di Social Media Marketing 2
N [VENDO] Gestione pagine FB Annunci servizi di Social Media Marketing 2
ientii [PHP] Gestione CheckBox PHP 1
W Consiglio su gestione di un form con XMLHttpRequest Ajax 0
booklisa Compressione immagini e gestione media CMS (Content Management System) 1
T gestione livelli sessioni php msqli PHP 1
giuseppe_123 [PHP] Gestione corsi PHP 1
A [WordPress] Plugin gestione ordine prodotto. WordPress 0

Discussioni simili