Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200

    (JS) Variabile di variabile

    Ciao a tutti.

    So che esiste un modo per interpretare il contenuto di una variabile a sua volta come variabile.
    L'avevo letto da qualche parte ma me lo sono scordato e non riesco più a trovarlo.

    Qualcuno se lo ricorda?

    In particolare vorrei poter chiamare da una funzione "Function_X(NmeFunz)", un'altra funzione il cui nome è contenuto nella variabile "NmeFunz" dell'esempio.

    Qualcuno può suggerirmi qualcosa?


    Es:

    function Function_X(NmeFunz){

    chiama NmeFunz
    }



    Grazie.

  2. #2
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    C'era una volta ... ora e` deprecato.

    function Function_X(NmeFunz){
    eval("NmeFunz()");
    }

    Forse si puo` fare in altro modo, usando la sintassi degli oggetti, ma non saprei al momento.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Infatti mi sembrava di ricordare proprio la Eval.
    Purtroppo non funziona.
    Su quell'istruzione mi dà una segnalazione d'errore: "Prevista funzione".

    Allego l'esempio:

    <!--<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <HTML>
    <HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <SCRIPT language="JavaScript" type="text/javascript">
    function ExecFunz(NmeFunz){
    alert("ExecFunz")
    eval("NmeFunz()")
    }//End-Function
    function GetLink(){
    alert("GetLink")
    }//End-Function
    </SCRIPT>
    <BODY>
    <SCRIPT language="JavaScript" type="text/javascript">
    ExecFunz("GetLink")
    </SCRIPT>
    </BODY>
    </HTML>


    Ti viene in mente qualche altra soluzione?

    Grazie.

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    function ExecFunz(NmeFunz){
    alert("ExecFunz")
    eval(NmeFunz+"()")
    }//End-Function

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Bravissimo Willy.
    Stavo giusto scrivendo di aver risolto il problema modificando l'istruzione Eval esattamente come date proposta!

    Ma il fatto che sia stata deprecata cosa comporta esattamente?

    Grazie.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Significa che qualche browser potrebbe non implementarla, compreso le future versioni dei browser piu` usati.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Ma allora che alternativa mi rimane?
    Cosa posso usare al posto della Eval?

    Ovviamente, sconsiglio vivamente l'uso della Eval così come sto facendo io. Nel 99% dei casi non è il modo corretto di programmare e comunque deve essere posta molta attenzione per non far decadere il software in termini di analizzabilità e modificabilità. (Questo vale per tutti quelli che in futuro leggeranno questo post. Che non sia d'esempio.)

    Tuttavia il mio uso è particolare e può rientrare in quell 1%.
    Si tratta di moduli a scatola chiusa che forniscono un servizio alla programmazione con software altamente standardizzato.

    Qualche consiglio in proposito?

    La Eval non verrà riconosciuta neanche se nel tag DOCTYPE dichiaro "Transitional" al posto di "Strict"?

    Possibile che non ci sia un modo per mantenere la compatibilità verso il basso?

    Grazie.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    eval() ha problemi di carico computazionale del client (e` una istruzione molto pesante).
    Inoltre potrebbe prestarsi ad usi non corretti.

    Nel 90% dei casi si sostituisce con getElementById() o simili, in altri casi puo` serviere un vettore anziche` uan serie di variabili singole, ecc.

    Resta quell'1%, in cui rimane una soluzione possibile, ma essendo appunto pesante, potrebbe non venir implementata (pensa a browser contenuti in dispositivi portatili, come PDA o cellulari).

    Per il tuo problema specifico, non e` che ne sappiamo molto: magari si potrebbe fare una funzione unica a cui passare un parametro per discriminare tra comportamenti diversi.
    In pratica occorre aggirare il problema, facendo si` che sia risolvibile con strutture disponibili.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Sì, in realtà, la necessità è quella di chiamare una funziona specifica a seconda del bottone premuto.
    I bottoni hanno una presentazione standard. Possono variare solo la scritta,l'immagine in esso eventualmente contenuta e appunto la funzione da richiamare. Questi dati sono contenuti in tabelle d'architettura.

    Il raccordo è una funzione "ExecFunz" che viene chiamata dall'evento onClick sul bottone passando appunto la funzione da chiamare.

    ExecFunz dunque non farà altro che chiamare la funzione passata come parametro.

    A me servirebbe inserire le funzioni in file esterni (.js) caricati nella ExecFunz solo al momento del bisogno.

    A tal proposito, avevo provato con la seguente istruzione collocata dentro la function ExecFunz:

    W_Generic = "<script language='javascript' src='"
    W_DynamCall= W_Generic + NmeFunz + ".js" + "'>"
    document.write(W_DynamCall + "</scrip" + "t>") //Viene eseguita solo dopo la "<\Script>"

    Tuttavia ho notato che pur funzionando, sembra che (almeno in questo caso, dove cioè queste istruzioni sono messe dentro una funzione), il frame che contiene i bottoni (tra cui quello premuto) perde tutti gli oggetti in esso definiti (bottoni e addirittura lo sfondo che diventa bianco).

    Non trovando spiegazioni a questo fenomeno che probabilmente è un "bug" dovuto al fatto che l'istruzione utilizzata non fa parte della documentazione ufficiale (non è affatto documentata), ho provato a ripiegare sulla "Eval".

    E' chiaro che se la Eval verrà deprecata e non verrà garantita compatibilità con le versioni più recenti dei browser, non posso assolutamente utilizzarla.

    Dunque che altre soluzioni mi rimarrebbero secondo la tua esperienza per ottenere quanto descritto?

    Inoltre, mi piacerebbe sapere in quali termini misuri la pesantezza dell'istruzione Eval. C'è qualche documento a cui riferirsi in proposito?

    Grazie.

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.