Ho provato a gestire gli eventi attraverso un array di oggetti che hanno la il nome e il gestore dell'evento, tutto funziona se scrivo manualmente richiamando gli elementi dell'array con integer, ma appena cerco di ricreare la funzione all'interno di un ciclo qualcosa vas torto qualcuno ha qualche idea su come risolvere questa situazione??
riporto in seguito uno spezzone del codice:
"evs": [
{
"type": "click",
"eventHandler": "alert(\"you click\");"
},
{
"type": "mouseover",
"eventHandler": "event.currentTarget.style.borderWidth = \"10px\""
},
{
"type": "mouseout",
"eventHandler": "event.currentTarget.style.borderWidth = \"1px\""
}
]
for( i=0; i<evs.length; i++ ) {
eval('console.log(\'' + evs[i].type + ' ' + evs[i].eventHandler + '\');');
newDiv.addEventListener(evs[i].type, function(event){ eval(evs[i].eventHandler);});
}
// $(newDiv).bind(evs[0].type, function(event){eval(evs[0].eventHandler)});
// $(newDiv).bind(evs[1].type, function(event){eval(evs[1].eventHandler)});
// $(newDiv).bind(evs[2].type, function(event){eval(evs[2].eventHandler)});
Ora qui ho provato anche a usare addEventListener, ho provato a usare anche la proprieta' diretta di newDiv.click costruendolo dentro eval, non riesco ad abinare gli eventi con il loro gestore da dentro il ciclo, quando clicko con il mouse o avviene uno degli altri 2 eventi mi dice che eventHandler non e' stato definito, praticamente nel ciclo mi richiama esattamente il codice li, mentre fuori dal ciclo quelli commentati funziona senza dare problemi, e succede sia su firefox che chrome.