Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Problema con onload

  1. #1
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350

    Problema con onload

    Facendo qualche piccola modifica ad un codice che c'é sulla guida di javascript livello base (non oso pensare nelle altre! ) sono giunto al slideshow che tempo fa volevo fare con flash.

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    </head>
    <body>
    <script language="javascript" type="text/javascript"><!--
    var whichImage = 0;
    var maxImages = 5;
    function changeAnimation(theImage)
    {
    ++whichImage;
    if (whichImage <= maxImages) {
    var imageName="anim" + whichImage + ".jpg";
    theImage.src = imageName;
    }
    else {
    return whichImage = -1;
    }
    }
    //--></script>
    
    [img]anim0.jpg[/img]
    I problemi sono 2:
    1) Come faccio a validare il codice?
    2) Come faccio a scegliere il tempo tra un'immagine e l'altra?

    Grazie mille a tutti, se non ci fosse il forum sarei solo alla guida html!

  2. #2
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350
    up!

  3. #3
    1) per validare basta che tu metta il codice in un file .js e poi lo chiami nell'head così:
    <script src="mioFile.js" type="text/javascript"></script>
    2) utilizzerei la funzione javascritp "setTimeout", qualcosa del tipo:
    Codice PHP:
    setTimeout('changeAnimation(' theImage ')'2000
    2000 è in millisecondi, ergo 2 secondi. te li cambi come vuoi.
    Non sono certissimo che digerisca 'changeAnimation(' + theImage + ')', ovvero la concatenzione della stringa che indica la funzione con la variabile del nome dell'immagine.
    puoi provare anche qualcosa del tipo:
    Codice PHP:
    setTimeout(function(){
    ++
    whichImage;
    if (
    whichImage <= maxImages) {
    var 
    imageName="anim" whichImage ".jpg";
    theImage.src imageName;
    }
    else {
    return 
    whichImage = -1;
    }
    }, 
    2000); 
    Hope this help!
    Davide

  4. #4
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350
    PROBLEMA 1
    Ho provato a togliere lo script dal file html ma il problema persiste ed il problema rimane sempre lo stesso, ovvero:
    Line 9, Column 120: Attribute "onload" exists, but can not be used for this element.
    You have used the attribute named above in your document, but the document type you are using does not support that attribute for this element. This error is often caused by incorrect use of the "Strict" document type with a document that uses frames (e.g. you must use the "Transitional" document type to get the "target" attribute), or by using vendor proprietary extensions such as "marginheight" (this is usually fixed by using CSS to achieve the desired effect instead). This error may also result if the element itself is not supported in the document type you are using, as an undefined element will have no supported attributes; in this case, see the element-undefined error message for further information. How to fix: check the spelling and case of the element and attribute, (Remember XHTML is all lower-case) and/or check that they are both allowed in the chosen document type, and/or use CSS instead of this attribute. If you received this error when using the <embed> element to incorporate flash media in a Web page, see the FAQ item on valid flash.
    PROBLEMA 2
    Ho provato e riprovato ma non riesco a farlo funzionare...
    A so proprio na testa de coccio!

  5. #5
    ovvio, onload mica è un attributo standard di <img />. Per validarlo, e ti anticipo subito che per quanto ne so è un bel bordello, dovresti scriverti un codice js che controlli quando l'immagine è stata uploaddata. Es:
    Codice PHP:
    var image = new Image();
    image.src "url.jpg";
    image.onload=function() {
    // yup!
    }; 
    E' un casino perchè stando ai miei test, pensate un pò che strano, IE non sempre digerisce il tutto correttamente.
    Per il problema due l'unica strada che vedo è quella. studiati a modo la manipolazione del DOM (per il prob.1) e il metodo setTimeout (prob.2).
    Buon lavoro
    Davide

  6. #6
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350
    Originariamente inviato da Nerlaleph
    ovvio, onload mica è un attributo standard di <img />. Per validarlo, e ti anticipo subito che per quanto ne so è un bel bordello, dovresti scriverti un codice js che controlli quando l'immagine è stata uploaddata. Es:
    Codice PHP:
    var image = new Image();
    image.src "url.jpg";
    image.onload=function() {
    // yup!
    }; 
    E' un casino perchè stando ai miei test, pensate un pò che strano, IE non sempre digerisce il tutto correttamente.
    Per il problema due l'unica strada che vedo è quella. studiati a modo la manipolazione del DOM (per il prob.1) e il metodo setTimeout (prob.2).
    Buon lavoro
    Non é molto chiaro il tuo messaggio per le mie conoscenze attuali. Intendi dire una cosa del genere?

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    <script src="prova005b.js" type="text/javascript"></script>
    </head>
    <body>
    [img]anim0.jpg[/img]
    </body>
    </html>
    codice:
    // JavaScript Document
    var whichImage = 0;
    var maxImages = 5;
    var imageName = new Image(); 
    image.src = "anim0.jpg"; 
    image.onload=function() { 
    ++whichImage;
    if (whichImage <= maxImages) {
    var imageName="anim" + whichImage + ".jpg";
    theImage.src = imageName;
    }
    else {
    return whichImage = -1;
    }
    };
    Il codice non funziona proprio ma comunque non credo di aver capito cosa intendi dire. Qui é materia per superesperti...

    Comunque grazie ugualmente per averci provato Nerlaleph!

  7. #7
    più o meno: devi certamente togliere l'attributo "onload" dal tag <img />.
    Poi, avendo inserito il codice javascript in un file esterno (giustamente) devi accertarti che la pagina sia stata caricata, altrimenti il codice "parte" prima che questa sia caricata tutta. Ovvero devi scrivere:
    Codice PHP:
    window.onload= function(){
    // qui il tuo codice.

    per quanto riguarda poi l'onload dell'immagine ,ovvero quando l'immagine è stata caricata, prova il codice che ti ho postato, ma prova anche a fare una ricarca in google.

    Si, forse non è la problematica più semplice (e io non sono abbastanza bravo da riuscire a spiegarmi melgio) ma ricorda: solo affrontando problemi difficili si cresce!
    Davide

  8. #8
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350
    Peccato che io abbia solo 1 ora di tempo alla sera e 5 minuti nella pausa pranzo per approfondire i miei studi sul javascript. Ho ragionato sulla questione e non so se sono vicino alla soluzione ma forse ho fatto progressi in quanto il codice ora risulta validato. I problemi ora sono altri:
    1) Lo slidshow si ferma inspiegabilmente alla seconda immagine.
    2) Il setTimeout agisce sulla funzione e non sulla variabile.
    Come conseguenza di tutto ciò continuo a non capire a fondo l'utilità del comando onload che a volte pare superfluo nei miei codici. Tanto per farvi un esempio provate a togliere dalla mia ultima soluzione il pezzettino "window.onload = " e la mia affermazione si chiarisce subito.

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    </head>
    <body>
    [img]anim0.jpg[/img]
    <script language="javascript" type="text/javascript"><!--
    var numero_immagine = 0 ;
    var ultima_immagine = 5 ;
    setTimeout("slideshow()",3000);
    window.onload = function slideshow(){ 
    ++numero_immagine;
    if (numero_immagine <= ultima_immagine) {
    var nome_immagine = document.getElementById("immagine");
    nome_immagine.src = "anim" + numero_immagine + ".jpg";
    }
    else {
    return numero_immagine = -1;
    }
    }
    //--></script>


    P.S.: Per i soli interessati:
    foto.rar - 1.4 Mb

  9. #9
    Rispondo velocemente al discorso dell'onload, sperando di spiegarmi.

    Quando arriva al browser la risposta alla chiamata http, questo deve renderizzare, ovvero tradurre, tutto ciò ch ec'è scritto dentro, ovvero il nostro codice (HTML, Javascript e quant'altro).
    Se javascript interviene sul DOM, ovvero sulla struttura dell'HTML, o meglio sugli elementi che i tag rappresentano,
    va da se che bisogna che questi elementi siano stati già caricati dalla pagina.
    se io metto un document.getElementById("id") prima dell'evento onload, il document non troverà nessun Element .. perchè non è stato ancora creato.
    Perchè allora il tuo codice funziona? Perchè il tuo codice javascript è scritto DOPO i tag html. Pensala così: il browser legge riga per riga il markup della tua pagina e nel mentre crea il DOM. crea quindi la tua immagine, poi arriva a javascript e lo interpreta. E' ovvio che, avendo già renderizzato il tag <img /> il codice vada a buon fine.

    Non è molto elegante però nè chiaro inserire codice javascript all'interno della pagina HTML, oltretutto da problemi di validazione come hai visto. E' melgio allora inserirlo in un file esterno, ricordandosi però di aspettare l'avvenuto onload della pagina.

    Per il problema del setTimeout: prova setInterval. settimeout effetta la chiamata una volta sola, setinterval a ripetizione, se non ricordo male.
    Davide

  10. #10
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350
    sto ancora provando e non voglio demordere...
    é diventato un caso personale contro javascript...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.