Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100

    getElementbyID has no properties ma solo online

    codice:
    <style>
    .navigation{border-bottom:1px solid #000000; padding-left: 20px; font-size:14px; margin-top:20px;}
    .navigation ul{list-style-type:none; margin:0; padding:0; white-space:nowrap;}
    .navigation li{display:inline; margin:0; padding:0;}
    .navigation li a{text-decoration:none; border:1px solid #000000; padding:0px 8px; background:#ccc; color:#036}
    .navigation li a:hover{background-color: #f0f0f0; text-decoration:none;}
    .navigation li#activelink a{border-bottom:1px solid #fff; background-color:#fff; color:#603; font-weight:bold;}
    .blocco {display:none;}
    </style>
    
    <script>
      var elenco = "a_testo a_immagini a_opzioni"
      elenco = elenco.split(" ")
    
      function mostradiv(id) {
        for (x in elenco)
        {
          document.getElementById(elenco[x]).style.display = 'none';
          document.getElementById('list_' + elenco[x]).setAttribute('class', '');
          document.getElementById('list_' + elenco[x]).setAttribute('className', '');
        }
        document.getElementById(id).style.display = 'block';
        document.getElementById('list_' + id).setAttribute('class', 'activelink');
        document.getElementById('list_' + id).setAttribute('className', 'activelink');
      }
    </script>
    
    <div class="navigation">
      <ul style="list-style-type:none; margin:0; padding:0; white-space:nowrap;">
        <li id="list_testo" class="activelink">Testo
        <li id="list_immagini">Immagini
        <li id="list_opzioni">Opzioni[/list]
    </div>
    <div id="a_testo" class="blocco">div testo</div>
    <div id="a_immagini" class="blocco">div immagini</div>
    <div id="a_opzioni" class="blocco">div opzioni</div>
    ecco uno script che ho fatto per avere l'effetto di un menu a tab con css e javascript
    in locale mi funziona perfettamente, messo in una pagina di test del sito mi da sempre lo stesso errore all'inizio del ciclo for come se non esistesse un elemento con id "a_testo"
    ho provato a cambiare il nome dei div, ma nada

    com'è che in locale funziona e online no?

  2. #2
    Secondo me non funziona neanche in locale.
    Difatti 'list_' + elenco[x] assume i valori, in ordine, di list_a_testo, list_a_immagini, list_a_opzioni e non degli id che hai assegnato tu

    Dovresti modificare così:

    codice:
      var elenco = "testo immagini opzioni";
      elenco = elenco.split(" ");
    
      function mostradiv(id) {
        for (x in elenco)
        {
          document.getElementById('a_'+elenco[x]).style.display = 'none';
          document.getElementById('list_' + elenco[x]).setAttribute('class', '');
          document.getElementById('list_' + elenco[x]).setAttribute('className', '');
        }
        document.getElementById(id).style.display = 'block';
        document.getElementById('list_' + id).setAttribute('class', 'activelink');
        document.getElementById('list_' + id).setAttribute('className', 'activelink');
      }

  3. #3
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    Originariamente inviato da H5N1_Aviaria
    Secondo me non funziona neanche in locale.
    si hai ragione, questa svista è dovuta al fatto che pensando fosse un problema di variabli javascript o id già utilizzati nella pagina online, ho cominciato a rinominarli in maniera che non ci fossero doppioni
    nella stessa pagina includo anche scriptacolous e prototype e per questo ho pensato ad un eventuale conflitto o problema di variabili duplicate

    comunque lo script base (senza "a_") funziona perfettamente in locale (se può servire posto anche quello base)
    appena lo metto online sul sito mi da errore sia con firefox che con ie, e lo fa nella prima riga del ciclo, praticamente non riesce a trovare un elemento con un id "a_testo"

    può essere perchè lo nascondo con display:none nel foglio di stile e non lo trova?
    ma perchè in locale allora funziona?

  4. #4
    Puoi darmi il link?

  5. #5
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    Originariamente inviato da H5N1_Aviaria
    Puoi darmi il link?
    ti ho mandato un privato

  6. #6
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    ho fatto una serie di test ed alla fine ho scoperto che è la libreria prototype ad andare in conflitto con quella semplice funzione

    bip!

    ma significa che la libreria (l'ho pure aggiornata) è inaffidabile, o sono io che ho scritto qualche belinata?

  7. #7
    No, probabilmente utilizzi delle variabili già assegnate dalla libreria o la libreria inizializza alcune funzioni successivamente che vanno ad effettuare un cd. override di quelle scritte da te.
    L'ho provato in locale e funziona, ma online il valore a_x non assume via via 0 1 e 2, ma il valore "each".
    Quando si usano librerie bisognerebbe studiarne un po' il codice per sapere, quantomeno, quali variabili non utilizzare perchè già implementate a livello globale dalla libreria.

  8. #8
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    dopo aver fatto diverse prove ho scoperto che il conflitto con prototype era provocato dal costrutto "for (x in elenco)" e non dalle variabili

    sapevatelo

  9. #9
    difatti la variabile a_x nel ciclo for-each assumeva il valore "each" probabilmente a causa di una routine implementata da prototype.

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.