Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Uso di eval() in una funzione

    Salve a tutti,
    ho alcune righe di tabella con un certo ID:
    codice:
    <TR ID="id_1" STYLE="display: none">
    <TD>...campi vari...</TD>
    </TR>
    che vorrei visualizzare e nascondere con JS.
    La funzione creata senza eval() funziona tranquillamente, ma sto cercando di usare l'eval() per poterla riciclare a seconda dell'id degli elementi TR generati dinamicamente.
    Ecco qui il semplice codice:
    codice:
    <SCRIPT Language="Javascript" TYPE="text/javascript">
    <!--
    function exp(id) {
    if (eval("document.getElementById(\""+id+"\").style.display == \"none\")"))
    { eval("document.getElementById(\""+id+"\").style.display = \"block\";"); }
    else
    { eval("document.getElementById(\""+id+"\").style.display = \"none\";"); }
    return;
    }
    //-->
    </SCRIPT>
    
    visualizza/nascondi
    Potreste suggerirmi dove è l'inghippo?

    [Non ho usato volutamente il selettore CSS visibility e i suoi valori visible e hidden per questioni di spazio nella pagina.]
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  2. #2
    Emanuele, quando richiami la funzione nel link, l'id dell'elemento che le passi va messo tra apici.
    Inoltre c'è un errore di parentesi tonde nel primo eval() (una tonda di troppo in chiusura).
    Ecco qua la funzione corretta:
    codice:
    <SCRIPT Language="Javascript" TYPE="text/javascript">
    <!--
    function exp(w) {
    if (eval("document.getElementById(\""+w+"\").style.display == \"none\";"))
    { eval("document.getElementById(\""+w+"\").style.display = \"block\";"); }
    else
    { eval("document.getElementById(\""+w+"\").style.display = \"none\";"); }
    return;
    }
    //-->
    </SCRIPT>
    
    visualizza/nascondi
    Anche se id non è un una parola chiave riservata a Javascript o a Java o per le estensioni ECMA o un identificatore, conviene non usarlo come argomento di una funzione per non confondersi.

    Inoltre nell'uso di eval() per aumentare la leggibilità del codice puoi sostituire le doppie virgolette backslashate con gli apici.
    La tua funzione diverrebbe:
    codice:
    <SCRIPT Language="Javascript" TYPE="text/javascript">
    <!--
    function exp(w) {
    if (eval("document.getElementById('"+w+"').style.display=='none';"))
    { eval("document.getElementById('"+w+"').style.display='block';"); }
    else
    { eval("document.getElementById('"+w+"').style.display='none';"); }
    return;
    }
    //-->
    </SCRIPT>
    Non ti sembra una soluzione migliore?
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  3. #3

    Funziona!

    Yeah! Ho provato e funziona!
    Grazie, non so come avrei fatto senza di te...
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  4. #4
    Non avresti fatto
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    non capisco perche' debba usare l' eval?
    in questo caso inutile, cmq lento e deprecato

    suggerisco inoltre molta attenzione nel giocare col display di tr applicando ad esso valore block, mozilla da i numeri perche', giustamente, secondo gli standard block non e' valore di display adatto ad elementi di tabella
    (discorso che si riaffaccia di tanto in tanto in questo forum, pochi giorni fa l' ultima)
    ciao

  6. #6

    ;-)

    Grazie, ho visto.
    Utilissima la lista delle proprietà ufficiali di display, in particolare
    codice:
    TR { display: table-row }
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

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.