Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Errore var: Aiuto!!!

  1. #1

    Errore var: Aiuto!!!

    Salve a tutti, ho un problema e non so proprio come fare per risolverlo.
    Sto scrivendo il codice di una galleria di immagini. Vorrei che quando l'immagine viene cliccata zoomma in una finestra di dialogo e richiusa semplicemente dall'utente tramite una x.

    Riporto di seguito i frammenti di codice:

    HTML

    <div class="galleria">
    <img id="f1" class="img" src="Galleria/torta1.jpg" alt="Black and white">
    </div>
    <div id="myModal" class="modal">
    <span class="close">×</span>
    <img class="modal-content" id="img01">
    <div id="caption"></div>
    </div>

    CSS

    .modal {
    display: none; /* Hidden by default */
    position: fixed; /* Stay in place */
    z-index: 1; /* Sit on top */
    padding-top: 100px; /* Location of the box */
    left: 0;
    top: 0;
    width: 100%; /* Full width */
    height: 100%; /* Full height */
    overflow: auto; /* Enable scroll if needed */
    background-color: rgb(0,0,0); /* Fallback color */
    background-color: rgba(252,244,221,0.8); /* Black w/ opacity */
    }
    .modal-content {
    margin: auto;
    display: block;
    width: 80%;
    max-width: 700px;
    }
    #caption {
    margin: auto;
    display: block;
    width: 80%;
    max-width: 700px;
    text-align: center;
    color: #ccc;
    padding: 10px 0;
    height: 150px;
    }
    .modal-content, #caption {
    -webkit-animation-name: zoom;
    -webkit-animation-duration: 0.6s;
    animation-name: zoom;
    animation-duration: 0.6s;
    }

    @-webkit-keyframes zoom {
    from {-webkit-transform: scale(0)}
    to {-webkit-transform: scale(1)}
    }

    @keyframes zoom {
    from {transform: scale(0)}
    to {transform: scale(1)}
    }

    /* The Close Button */
    .close {
    position: absolute;
    top: 15px;
    right: 35px;
    color: #f1f1f1;
    font-size: 40px;
    font-weight: bold;
    transition: 0.3s;
    }

    .close:hover,
    .close:focus {
    color: #bbb;
    text-decoration: none;
    cursor: pointer;
    }

    /* 100% Image Width on Smaller Screens */
    @media only screen and (max-width: 700px){
    .modal-content {
    width: 100%;
    }}

    JAVASCRIPT

    var modal=document.getElementById('myModal');

    var img=document.getElementById('f1'); //trova il nodo corripondente a e lo memorizza nella variabile
    var modalImg=document.getElementById('img01');
    var captionText=document.getElementById("caption");

    img.onclick=function(){ //regola il comportamento del modal e imposta il contenuto di alt come didascalia
    modal.style.display="block";
    modalImg.src=this.src;
    modalImg.alt=this.alt;
    captionText.innerHTML=this.alt;
    }
    var span = document.getElementsByClassName("close")[0];

    // Chiude quando si clicca sulla "x"
    span.onclick = function() {
    modal.style.display = "none";
    }

    Nella console di FF continua a dirmi che img è null.
    Qualcuno potrebbe darmi una mano? sono inesperta.
    Grazie mille

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao e benvenuta.
    Premetto che qualche moderatore potrebbe chiudere questa discussione: il titolo è pressoché inadeguato e sarebbe opportuno utilizzare i tag di formattazione quando si posta del codice sul forum
    (vedere il regolamento di sezione).

    Riguardo il tuo problema, bisogna capire quando viene eseguito quel JavaScript, quindi assicurarsi che gli elementi del DOM siano stati creati prima di utilizzare i relativi metodi di manipolazione come getElementById(). Se il problema è questo, si può risolvere in vari modi a seconda delle tue esigenze e di come è organizzato il documento. Ad esempio inserire lo script dentro il gestore di evento window.onload, qualora lo script sia posto nell'head della pagina, oppure spostare fisicamente il blocco <script> dopo gli elementi in questione sul codice HTML, magari a fine <body>.

    Nel caso, potrebbe essere utile vedere l'eventuale pagina pubblica dove riscontri il problema. Posta il link se ti è possibile.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Non credo di aver ben capito. Gli elementi del DOM non vengono creati nell'html? Cioè la variabile img non è definita in html come f1 automaticamente? Scusami ma non riesco a entrare nel meccanismo

    Purtroppo non è un sito pubblico ma lo sto creando per un esame universitario per cui non posso linkartelo. Mi scuso per la forma con cui ho posto la mia domanda.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Non credo di aver ben capito. Gli elementi del DOM non vengono creati nell'html? Cioè la variabile img non è definita in html come f1 automaticamente? Scusami ma non riesco a entrare nel meccanismo
    OK, bisognerebbe rivedersi un po' le basi. Facciamo un passo indietro... quando il browser "legge" un documento html, inizia dalla prima riga in alto fino all'ultima in basso, così come se tu leggessi riga per riga. Man mano che vengono letti i vari tag html, vengono creati di conseguenza i relativi oggetti, i cosiddetti elementi del DOM (Document Object Model, in italiano "modello a oggetti del documento") che restano appunto in memoria nella sessione corrente, relativa al documento stesso, e possono essere quindi manipolati da script.
    Ora JavaScript non può analizzare/manipolare un oggetto che ancora non è stato creato, cioè che non è presente nel DOM. Quando infatti si tenta di eseguire un qualche metodo (una qualsiasi funzione) che agisca su un qualsiasi oggetto non ancora creato (cioè non ancora presente nel DOM) si riceverà un errore e lo script non verrà eseguito.

    Chiaramente ci sono diversi modi per lanciare lo script essendo sicuri che gli elementi interpellati siano stati creati, e risultino presenti nel DOM. Come già indicato sopra, bisogna capire quale sia il tuo scenario e quali le tue esigenze.
    Se lo script è incluso direttamente nel documento puoi usare window.onload (eventualmente vedi la relativa documentazione, ad esempio qui) o provare a spostare semplicemente il blocco di script, compresi i tag <script> </script>, alla fine del body in modo da essere sicuri che gli elementi in questione siano stati creati e presenti nel DOM.
    Ultima modifica di KillerWorm; 10-07-2016 a 18:20
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    infatti il moderatore chiude.

    vero che sei nuovo ma hai ignorato del tutto il regolamento
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


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.