Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    Compatibilità anche x mozilla

    Mi potete aiutare a convertire questo semplice codice anche per mozilla?
    codice:
    function Secondi ()
    {
      secondi=document.getElementById("secs").innerText;
      document.getElementById("secs").innerHTML  = secondi-1;
      setTimeout(Secondi, 1000);
    }
    la funzione viene chiamata cn l'evento onload e l'id secs non è altro che questo:

    <span id="secs">11</span>

    grazie

  2. #2
    Uhm...mi sa che non puoi. innerText e innerHTML, se non erro, sono proprietà supportate solo da Internet Explorer (viva i codici proprietari!).

    Poi cmq non faresti prima a usare un campo di testo "invisibile" (nel senso di nascosto annullandone il bordo, impostanto il colore di sfondo uguale a quello della pagina e mettendolo in read-only) a cui cambi semplicemente il valore?
    Una cosa del genere intendo:

    codice:
    function Secondi() {
    secondi = document.getElementById("secs").value;
    document.getElementById("secs").value = secondi - 1;
    setTimeout(Secondi,1000);
    }
    
    <input type="text" id="secs" value="11" readonly="readonly" />
    Per "mimetizzare" il campo di testo nella pagina, in modo che sembri testo scritto nel codice (X)HTML, assegni all'elemento input con id="secs" la seguente regola di stile tramite i CSS:

    codice:
    #secs {
    width: LARGEZZApx;
    height: ALTEZZApx;
    font-size: DIMENSIONE_FONTpx;
    font-family: TIPO_FONT;
    color: COLORE_FONT;
    text-align: ALLINEAMENTO_TESTO;
    background-color: COLORE_SFONDO;
    padding: 0;
    border: none;
    margin: 0;
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Si può fare, bastava fare il parsing esplicito

    codice:
    function Secondi ()
    {
      secondi=parseInt(document.getElementById("secs").innerHTML);
      document.getElementById("secs").innerHTML  = secondi-1;
      setTimeout(Secondi, 1000);
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Interessante questa cosa...pensavo che innerHTML fosse codice "proprietario" di IE. Si vede che è un po' che non uso certe cose di JavaScript...Beh, meglio così!
    Anche se questo dimostra come IE faccia sempre e comunque di testa sua!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ah... in questo caso IE è un po' meno rigido di FF nell'interpretazione del formato numerico (ha fatto la conversione implicitamente da stringa a intero)... innerText invece dovrebbe essere codice proprietario di IE

    http://blog.coderlab.us/2005/09/22/12/

    Ciao.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Infatti...IE è SEMPRE meno rigido degli altri browser, tanto che talvolta fa "passare" codici assurdi riuscendo pure ad interpretarli!

    Però mi pare che questo sia uno dei pochissimi casi in cui è IE ad avere ragione. Da quello che so, JavaScript tenta sempre le conversioni implicite dei tipi di dati. Ora, se leggendo il "valore" con innerHTML lo considera (giustamente) una stringa, è anche vero che facendo "secondi - 1" dovrebbe convertire implicitamente la stringa contenuta nella variabile secondi in un numero. Quindi il parseInt() iniziale dovrebbe essere superfluo...e invece per gli altri browser non lo è...mah!

    innerText infatti ero sicuro che fosse codice proprietario di IE, mentre non lo ero per innerHTML. Ricordo che usavo (all'epoca) innerText per leggere i valori delle aree di testo, poi sostituito da value.

  7. #7
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da Andrea1979
    Si può fare, bastava fare il parsing esplicito

    codice:
    function Secondi ()
    {
      secondi=parseInt(document.getElementById("secs").innerHTML);
      document.getElementById("secs").innerHTML  = secondi-1;
      setTimeout(Secondi, 1000);
    }
    funge alla perfezione...grazie a tutti e due

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.