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

    problema con oggetti javascript

    non so come spiegare bene il mio problema metto un esempio

    var wall={
    id:null,
    color:"blue",
    init:function() {
    wall.id=document.getElementById('prova');
    wall.id.style.background = wall.color;
    },
    }
    mi da wall.id è nullo dove sbaglio?
    richiamo tutto cosi
    onload= wall.init();

    grazie in anticipo a chi ha la pazienza di spegarmi

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,696
    Metti onload sul tag body
    codice:
    <body onload="wall.init();">
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    grazie cosi funziona

    però non capisco perchè se metto window.onload=wall.init(); nn va?

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,696
    Cerco di spiegartelo.. non è così semplice.
    Puoi utilizzare window.onload ma non nel modo in cui hai fatto tu.

    "onload" è un gestore di evento. Ciò significa che tu puoi attribuire a questo una determinata funzione in modo che sia richiamata nel momento in cui avviene tale evento:

    In questo modo:
    codice:
    function unafunzione (){
     alert("questa è unafunzione");
    }
    
    window.onload = unafunzione;
    "unafunzione" è dichiarata inizialmente ma non sarà richiamata fintanto che non avvenga l'evento onload.
    Infatti su onload ho assegnato solo il "riferimento" alla funzione ma non la sto richiamando in quel preciso istante in cui viene letta quella riga. Saprai bene che per richiamare una qualsiasi funzione devi apporre le parentesi dopo il nome della funzione:
    codice:
    unafunzione()
    ma nel tuo caso non devi richiamare la funzione. Devi solo assegnarla al gestore onload.

    Tu hai scritto:
    codice:
    window.onload=wall.init();
    dal momento che stai cercando di richiamare la funzione (e non hai semplicemente indicato il suo riferimento) l'interprete javascript si aspetta che wall.init() restituisca un valore da assegnare a window.onload. Ovvero esegue tale funzione. Ma cosa trova dentro quella funzione? ... questo codice, che tenterà di eseguire:
    codice:
    wall.id=document.getElementById('prova');
    wall.id.style.background = wall.color;
    Ora, siccome la pagina non è stata caricata completamente, quindi tutto ciò che è contenuto nel body ancora non esiste in quel preciso istante in cui hai richiamato wall.init(). E' ovvio che questa istruzione restituisce un valore nullo:
    codice:
    document.getElementById('prova')
    e quella dopo (essendo "wall.id" = null):
    codice:
    wall.id.style.background = wall.color;
    ..genera un errore perché .stylecompagniacantante non esistono in un oggetto null:

    Per concludere, puoi usare window.onload in questo modo (nota la mancanza delle parentesi):
    codice:
    window.onload=wall.init;
    Oppure creando una funzione generica in cui poi richiami la tua funzione:
    codice:
    window.onload=function(){wall.init();}
    Che sostanzialmente è ciò che avviene con questo (nota che in questo caso ci vanno le parentesi):
    codice:
    <body onload="wall.init();">
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    be che dire sei stato gentilissimo grazie x la pazienza

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.