Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    311

    errore "function expected" quando richiamo 2 volte la stessa funzione javascript

    buongiorno.
    ho creato una funzione javascript per ottenere il numero di giorni di differenza tra una data e quella odierna.
    quando la chiamo una volta va bene. quando la richiamo la 2° volta mi restituisce errore: function expected
    mi potete aiutare? grazie

    <script type="text/javascript">
    function giorni_differenza(data)
    {
    data_odierna = new Date();
    mese = data_odierna.getMonth()+1;
    giorno = data_odierna.getDate();
    anno = data_odierna.getFullYear();

    anno1 = parseInt(data.substr(6),10);
    mese1 = parseInt(data.substr(3, 2),10);
    giorno1 = parseInt(data.substr(0, 2),10);

    var dataok=new Date(anno1, mese1-1, giorno1);
    var dataok2=new Date(anno, mese-1, giorno);

    differenza = dataok2-dataok;
    giorni_differenza = new String(differenza/86400000);

    document.write(giorni_differenza);
    }
    </script>


    <script type="text/javascript">
    giorni_differenza("11/02/2016");
    </script>


    <script type="text/javascript">
    giorni_differenza("11/02/2016");
    </script>

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, nel tuo script ci sono due occorrenze di cattiva programmazione che (assieme) sono la causa dell'errore che riscontri.

    1) Dentro una funzione, quando si intende usare delle variabili locali, è sempre meglio dichiararle opportunamente con l'istruzione var, diversamente tali variabili faranno riferimento al contesto globale.

    2) Meglio evitare l'uso dello stesso nome variabile per definire variabili/oggetti diversi, ma usare sempre nomi ben distinti. Questo evita vari grattacapi.

    Hai definito una funzione nominandola "giorni_differenza" e al suo interno hai valorizzato la variabile "giorni_differenza", pensando che questa fosse una nuova variabile mentre non hai fatto altro che sovrascrivere la funzione creata inizialmente. Questo è il motivo dell'errore che viene restituito.

    Soluzione: definisci le variabili con var e/o usa nomi variabile differenti. Sarebbe meglio comunque fare entrambe le cose.

    Inoltre aggiungerei anche:

    3) In vari casi l'uso di document.write() potrebbe portare a diverse problematiche. Ad esempio, se questo è eseguito dopo che la pagina è stata caricata completamente, l'intero contenuto della pagina sarà sovrascritto. Ci sono poi altri casi per cui l'uso di quel metodo è definito una cattiva pratica. Ad ogni modo ti consiglierei invece l'uso di metodi per la manipolazione del DOM, uno potrebbe essere.

    4) Spezzettare lo script all'interno del documento comporta una cattiva gestione dell'insieme. E' consigliabile concentrare tutto lo script, per quanto possibile, in un unico punto. Ad esempio, puoi mettere tutto alla fine del tag <body>. E' chiaro che questo porta ad evitare l'uso di document.write.

    5) Quando posti del codice sul forum è opportuno usare gli appositi tag di formattazione (vedi info utili nel regolamento di sezione).

    Posto un esempio completo:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <style type="text/css">
          span{
            color: Blue;
          }
        </style>
      </head>
      <body>
        Giorni A: <span id="giorniA"></span>
        <br>Giorni B: <span id="giorniB"></span>
        <br>
        <br>Altro valore inserito al click (cosa che non potrebbe essere fatta usando <i>document.write()</i>).
        <br><input type="button" id="btnInserisciValore" value="Click Me">: <span id="giorniC"></span>
    
        <script type="text/javascript">
          document.getElementById('giorniA').innerHTML = giorni_differenza('11/02/2016');
          document.getElementById('giorniB').innerHTML = giorni_differenza('11/02/2016');
          
          document.getElementById('btnInserisciValore').onclick = function(){
            document.getElementById('giorniC').innerHTML = giorni_differenza('01/01/2001');
          }
          
          function giorni_differenza(data){
            var data_odierna = new Date()
              , mese = data_odierna.getMonth()+1
              , giorno = data_odierna.getDate()
              , anno = data_odierna.getFullYear()
    
              , anno1 = parseInt(data.substr(6),10)
              , mese1 = parseInt(data.substr(3, 2),10)
              , giorno1 = parseInt(data.substr(0, 2),10)
    
              , dataok=new Date(anno1, mese1-1, giorno1)
              , dataok2=new Date(anno, mese-1, giorno)
    
              , differenza = dataok2-dataok
              , giorni_differenza = new String(differenza/86400000)
            ;
    
            return giorni_differenza;
          }
        </script>
      </body>
    </html>
    Nota che (in questo esempio) per definire le variabili ho usato una forma contratta scrivendo un'unica istruzione var iniziale e usando la virgola per separare le diverse variabili. Tutte queste saranno comunque definite come variabili locali, cioè come se ognuna di esse fosse dichiarata con var.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    311
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, nel tuo script ci sono due occorrenze di cattiva programmazione che (assieme) sono la causa dell'errore che riscontri.

    1) Dentro una funzione, quando si intende usare delle variabili locali, è sempre meglio dichiararle opportunamente con l'istruzione var, diversamente tali variabili faranno riferimento al contesto globale.

    2) Meglio evitare l'uso dello stesso nome variabile per definire variabili/oggetti diversi, ma usare sempre nomi ben distinti. Questo evita vari grattacapi.

    Hai definito una funzione nominandola "giorni_differenza" e al suo interno hai valorizzato la variabile "giorni_differenza", pensando che questa fosse una nuova variabile mentre non hai fatto altro che sovrascrivere la funzione creata inizialmente. Questo è il motivo dell'errore che viene restituito.

    Soluzione: definisci le variabili con var e/o usa nomi variabile differenti. Sarebbe meglio comunque fare entrambe le cose.

    Inoltre aggiungerei anche:

    3) In vari casi l'uso di document.write() potrebbe portare a diverse problematiche. Ad esempio, se questo è eseguito dopo che la pagina è stata caricata completamente, l'intero contenuto della pagina sarà sovrascritto. Ci sono poi altri casi per cui l'uso di quel metodo è definito una cattiva pratica. Ad ogni modo ti consiglierei invece l'uso di metodi per la manipolazione del DOM, uno potrebbe essere.

    4) Spezzettare lo script all'interno del documento comporta una cattiva gestione dell'insieme. E' consigliabile concentrare tutto lo script, per quanto possibile, in un unico punto. Ad esempio, puoi mettere tutto alla fine del tag <body>. E' chiaro che questo porta ad evitare l'uso di document.write.

    5) Quando posti del codice sul forum è opportuno usare gli appositi tag di formattazione (vedi info utili nel regolamento di sezione).

    Posto un esempio completo:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <style type="text/css">
          span{
            color: Blue;
          }
        </style>
      </head>
      <body>
        Giorni A: <span id="giorniA"></span>
        <br>Giorni B: <span id="giorniB"></span>
        <br>
        <br>Altro valore inserito al click (cosa che non potrebbe essere fatta usando <i>document.write()</i>).
        <br><input type="button" id="btnInserisciValore" value="Click Me">: <span id="giorniC"></span>
    
        <script type="text/javascript">
          document.getElementById('giorniA').innerHTML = giorni_differenza('11/02/2016');
          document.getElementById('giorniB').innerHTML = giorni_differenza('11/02/2016');
          
          document.getElementById('btnInserisciValore').onclick = function(){
            document.getElementById('giorniC').innerHTML = giorni_differenza('01/01/2001');
          }
          
          function giorni_differenza(data){
            var data_odierna = new Date()
              , mese = data_odierna.getMonth()+1
              , giorno = data_odierna.getDate()
              , anno = data_odierna.getFullYear()
    
              , anno1 = parseInt(data.substr(6),10)
              , mese1 = parseInt(data.substr(3, 2),10)
              , giorno1 = parseInt(data.substr(0, 2),10)
    
              , dataok=new Date(anno1, mese1-1, giorno1)
              , dataok2=new Date(anno, mese-1, giorno)
    
              , differenza = dataok2-dataok
              , giorni_differenza = new String(differenza/86400000)
            ;
    
            return giorni_differenza;
          }
        </script>
      </body>
    </html>
    Nota che (in questo esempio) per definire le variabili ho usato una forma contratta scrivendo un'unica istruzione var iniziale e usando la virgola per separare le diverse variabili. Tutte queste saranno comunque definite come variabili locali, cioè come se ognuna di esse fosse dichiarata con var.
    tutto ok grazie. era il n.2 l'errore principale

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.