Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    86

    Problema nell'associazione funzioni con variabili ereditarie in runtime

    Salve a tutti e un grazie anticipato per l'attenzione ed i mal di testa che vi farete venire per rispondere al mio quesito dunque vado subito al punto.

    Ho un problema sull'associazione di funzioni a determinati campi questa nel mio caso avviene attraverso questa funzione:

    codice:
    addEvent(coll_molt, "blur", function(){collection(coll_name,coll_molt)});
    codice:
    function addEvent(element, type, expression, bubbling){ 	bubbling = bubbling || false; 	if(window.addEventListener){ // Standard 	    element.addEventListener(type, expression, bubbling); 	    return true;     }else if(window.attachEvent){ // IE 	    element.attachEvent("on" + type, expression);         return true;     }else return false; }
    associo dunque attraverso lo scorrimento dei campi tramite ciclo for, e la sudetta funzione, un' altra funzione che deve verificarsi ad un dato evento il mio evento è il BLUR.

    La funzione che associo si comporta in maniera diversa a secondo dei valori che le vengono ereditati ecco un esempio della funzione:

    codice:
    function collection(coll_name_c,coll_molt_c){
    //azione...
    }
    Bene fin quì tutto ok ed anche abbastanza banale, ve ne do atto.
    Il problema avviene durante l' eredità delle variabili.
    Dunque quando viene eseguita la funzione addEvent sono corrette e diversificate ma quando poi viene richiamata la funzione "collection" durante l'evento (blur) dei campi, le variabili ereditate, sono tutte uguali e corrispondenti a quelle ereditate nell'ultimo passaggio del ciclo for.

    Sono letteralmente disperato chiedo umilmente aiuto, mi spiace di non aver potuto postare il codice perchè è veramente enorme e complesso.

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    prova a sostituire a
    function(){collection(coll_name,coll_molt)}

    (function(a,b){return function(){collection(a,b)}})(coll_name,coll_molt)

  3. #3
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    La soluzione di Xinod è validissima, ma ha l'inconveniente di creare tante closures (e di conseguenza dispendio di memoria RAM) per quante sono le funzioni create dal tuo ciclo. Fossi in te mi studierei se è possibile annidare i valori propri cui deve attingere di volta in volta l'evento all'interno di ciascun nodo, attraverso le funzioni [NODO].setUserData e [NODO].getUserData(). Questo ti permetterebbe di utilizzare una funzione unica per tutti gli eventi, invece di creare tante funzioni per quanti sono i campi. Magari se provi a postare un codice un po' più completo, almeno per quanto riguarda il ciclo, posso provare ad aiutarti io. Ciao!!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    86
    Ciao XINOID, come non detto, funziona ottimamente e correttamente adesso. Grazie davvero. Se avessi tempo potresti spiegarmela meglio questa istruzione? In cosa differiva dalla mia ?

    Garzie anche carlomarx per l'alternativa offertami

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.