Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33

    funzione per concatenare stringhe

    Ciao a tutti,

    sto cercando di creare una funzione che permetta di costruire una stringa in base ai parametri che le vengono passati dai pulsanti che richiamano la funzione stessa.

    Lo scopo sarebbe poter costruire una stringa del tipo
    "myString.parametro = valore" (es. myString.toUTCString() = giorno mese anno....),
    dove il parametro e ovviamente il valore variano di volta in volta a seconda di cosa viene passato come argomento alla funzione.

    Ecco un esempio di codice:

    codice:
    <script type="text/javascript" language="JavaScript">
    
    var myDate = new Date();
    
    function myAlert(param) {
    
    var myDateString;
    
    myDateString = "myDate" + param + " = " + myDate + param; 
    
    alert(myDateString); }
    
    </script>
    
    
    
    
    <input type="button" value="button1" onclick="myAlert('.toUTCString()')"  />
    
    <input type="button" value="button2" onclick="myAlert('.toLocaleString()')"  />
    
    <input type="button" value="button3" onclick="myAlert('.getTimezoneOffset()')"  />
    Mi trovo però davanti ad un problema: nella parte evidenziata in rosso, non riesco a costruire un qualcosa del tipo "myDate.toUTCString()" che funzioni come un oggetto di tipo Date appunto perchè giustamente JavaScript li concatena come una stringa di testo.
    Quello che vorrei io è che venisse visualizzata la stringa "myDate.param()" e poi il VALORE del metodo myDate.param().

    Esiste il modo di "far capire" a JS che non deve concatenarli ma che deve effettivamente "attaccare" ad un oggetto di tipo Date un suo metodo di modo che possa farlo visualizzare con alert?
    Spero di essermi espresso a dovere perchè non è facilissimo da spiegare.
    Grazie!
    "Better to live as king of beasts
    Than as a lamb scared and weak"

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    in generale sembrerebbe tu stia cercando l' eval

    nel caso specifico pero' puo' essere evitato, se param fosse semplicemente "toUTCString"
    potresti scrivere myDate[param]()

    ciao

  3. #3
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33
    Originariamente inviato da Xinod
    in generale sembrerebbe tu stia cercando l' eval
    Grazie per il tuo intervento,

    Avevo considerato anch'io un "eval" ma non sono riuscito a fargli fare niente di più rispetto a quello che faccio con del codice scritto "normalmente", cioè continua (giustamente) a considerare l'unione di myDate e param come una stringa di testo.

    Io vorrei invece cercare il metodo per unire myDate (che è un oggetto Date) e param ( per esempio ".getTimezoneOffset()" ) di modo che JS riconosca il risultato dell'unione come Oggetto + metodo e non come una stringa di testo.

    Credo che il problema dipenda proprio dal fatto che param viene passato come una stringa di testo dal pulsante che richiama la funzione...
    a questo punto non so se sia possibile fare quello che vorrei fare io.

    nel caso specifico pero' puo' essere evitato, se param fosse semplicemente "toUTCString"
    potresti scrivere myDate[param]()
    Non capisco questo tuo ultimo suggerimento. Parli di un array?

    Ciao!
    "Better to live as king of beasts
    Than as a lamb scared and weak"

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    certo puoi farlo con eval se ho capito cosa intendi. Ti faccio un esempio:

    codice:
    var ciao = new String("ciao.");
    var param = "indexOf('.')"; 
    alert(eval("ciao."+param));

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    <input type="button" value="button1" onclick="myAlert('toUTCString')" />
    ...
    myDateString = "myDate." + param + "() = " + myDate[param]();

  6. #6
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33
    Originariamente inviato da Vindav
    certo puoi farlo con eval se ho capito cosa intendi. Ti faccio un esempio:

    codice:
    var ciao = new String("ciao.");
    var param = "indexOf('.')"; 
    alert(eval("ciao."+param));
    Ti ringrazio, questo esempio come l'hai esposto tu effettivamente fa il suo dovere, suppongo perchè stai comunque concatenando due stringhe e JS non ha problema nel fare questo.
    Purtroppo nel mio caso non funziona:
    codice:
    var myDate = new Date();
    var myParam = ".getTimezoneOffset()";
    eval(document.write(myDate+myParam));
    Il codice sopra riporta "Wed Mar 9 19:07:03 UTC+0100 2011.getTimezoneOffset()".
    Anzichè concatenare un oggetto Date() ad una stringa che contiene il suo metodo e quindi mostrarmi il risultato del metodo eval continua a prendere l'oggetto Date, estrapolarne la stringa ("Wed Mar 9 19:07:03 UTC+0100 2011") e POI concatenarla alla stringa che contiene il metodo... come risultato abbiamo sempre il codice scritto sopra in rosso.

    Credo proprio che il problema sia concatenare un oggetto di tipo Date ad una stringa che contiene un suo metodo...
    a parte il caso specifico di questo esempio vorrei cercare di capire se sia possibile farlo.
    Hai qualche altra idea?


    Originariamente inviato da Xinod

    codice:
    <input type="button" value="button1" onclick="myAlert('toUTCString')" />
    ...
    myDateString = "myDate." + param + "() = " + myDate[param]();
    Anche qui purtroppo la cosa non mi aiuta, credo per lo stesso motivo.
    Idee... ??

    Grazie ad entrambi.
    "Better to live as king of beasts
    Than as a lamb scared and weak"

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    suppongo perchè stai comunque concatenando due stringhe e JS non ha problema nel fare questo
    eval serve proprio a questo, guarda bene il mio esempio! non è come l'hai impostato tu è normale che non ti funzioni.

    codice:
    var myDate = new Date();
    var myParam = ".getTimezoneOffset()";
    document.write(eval("myDate"+myParam));
    inoltre come vedi la scrittura sul documento va effettuata al di fuori del metodo eval altrimenti stami la stringa e non il valore.


  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    <input type="button" value="button1" onclick="myAlert('toUTCString')" />
    ...
    myDateString = "myDate." + param + "() = " + myDate[param]();
    Anche qui purtroppo la cosa non mi aiuta, credo per lo stesso motivo.
    Idee... ??
    Ma prima di dire che le soluzione proposte non ti aiutano, le hai almeno provate? mi sembra proprio di no. Ho appena provato la soluzione proposta da xinod, non che ce ne fosse bisogno era lampante che funzionasse, cmq ovviamente non ha dato problemi ed è sicuramente la soluzione migliore anziche utilizzare eval(che funziona cmq come ti ho mostrato sopra).

    Idee non te ne servono piu perche le soluzioni ti sono gia state mostrate, consigli invece te ne servono molti. Riguardati come si usa la funzione eval e il funzionamento degli array associativi e prima di liquidare le soluzione proposte studiatele con + attenzione perche altrimenti l'unica cosa che ottieni è far perdere la voglia di aiutarti.

  9. #9
    a me era venuta in mente questa (estesa ad un oggetto generico):

    Object.prototype.useParam = function(param) {
    return eval('this.' + param + '();');
    }

    var myDate = new Date();
    window.alert(myDate.useParam ('getTimezoneOffset'));
    Michele
    King Of The Kill

  10. #10
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33
    Originariamente inviato da Vindav
    codice:
    var myDate = new Date();
    var myParam = ".getTimezoneOffset()";
    document.write(eval("myDate"+myParam));
    inoltre come vedi la scrittura sul documento va effettuata al di fuori del metodo eval altrimenti stampi la stringa e non il valore.
    Grazie, così funziona.

    Ti assicuro che le soluzioni che mi avete proposto le ho provate, è inutile chiedere un aiuto se poi non lo si segue.
    Più che "non mi aiutano" avrei forse dovuto dire "non riesco a farle funzionare".

    Posso capire che a volte avere a che fare con i "niubbi" possa essere pesante ma se chiedo una mano nel fare qualcosa è proprio perchè, per qualche motivo, non riesco a farlo... non dare per scontato che io non guardi le vostre proposte perchè non è così.

    Sono consapevole del tempo che si perde nello stare dietro alle persone meno esperte di te e per questo sono grato a te e a tutti quelli che mi hanno aiutato e che lo faranno in futuro, ma mi sembra che tu ti sia seccato eccessivamente... mi spiace per questo, perchè assolutamente non era mia intenzione, e spero tu abbia voglia in futuro di darmi ancora consigli insieme agli altri.

    Comunque, tornando sul tecnico, potrà sembrarti strano ma gli esempi che ho trovato su eval (e ne ho cercati parecchi, compreso W3Schools) evidentemente non mi hanno permesso di capire bene come funziona.
    Grazie ai tuoi esempi e a https://developer.mozilla.org/en/Jav...l_Objects/Eval vedrò di approfondire, se hai altri link a siti degni di nota spara pure.

    Grazie anche per la dritta sugli array associativi, li andrò ad approfondire; ho usato molto raramente gli array multidimensionali, figuriamoci gli associativi....
    Ciao!

    Originariamente inviato da KingOfTheKill
    codice:
    Object.prototype.useParam = function(param) {
    return eval('this.' + param + '();');
    }
    
    var myDate = new Date();
    window.alert(myDate.useParam ('getTimezoneOffset'));
    Grazie anche a te...
    "Better to live as king of beasts
    Than as a lamb scared and weak"

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.