Eval, for, event

di il
1 risposte

Eval, for, event

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.

1 Risposte

  • Re: Eval, for, event

    Per il momento ho risolto con il costruttore Function
    
    $(newDiv).bind(evs[i].type, new Function(evs[i].eventHandler));
    
    Funziona come vorrei e non dovrebbe darmi troppo fastidio il fatto che viene compilato ogni volta una nuova funzione, vedro quando il programma sara completamente terminato.
Devi accedere o registrarti per scrivere nel forum
1 risposte