Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    211
    Grazie per le risposte e i suggerimenti. Ho cercato di seguire i suggerimenti, ma il problema è rimasto.
    Ho risolto in parte il problema mettendo lo <script> con il ciclo for subito dopo la dichiarazione <select></select> della selezione posta tra <body> e </body>e vengono mostrate regolarmente tutte e 7 le opzioni della selezione. Ma se lo <script> con il ciclo for è richiamato con un pulsante con la funzione posta tra <head> e </head> viene mostrata solo la prima opzione della selezione con l'errore "autorizzazione negata". Non capisco per quale motivo il ciclo messo dopo funzioni e, invece, messo prima non funzioni. Spero in un vostro aiuto, anche se sono solo un dilettante e forse non mi spiego bene e compio errori.
    Riporto la versione funzionante parzialmente qui sotto

    lanvoel

    codice:
    <html>
    <head>
    <script language="JavaScript">
    function lista_selezione()
    {
    var theDayElement= window.document.form1.theDay; 
    //document.write("Ci sono "+ theDayElement.length +" opzioni"); 
    var contatore; 
    for (contatore=0; contatore < theDayElement.length; contatore++) // non funziona 
    { 
    document.write("Il testo della opzione "+ contatore + " è " + theDayElement.options[contatore].text +"<br>"); 
    } 
    } 
    </script> 
    </head> 
    <body> 
    <form name=form1> 
    <select name=theDay size=5> 
    <option value=0 selected> lunedì</option>
    <option value=1> martedì</option> 
    <option value=2> mercoledì </option> 
    <option value=3> giovedì</option> 
    <option value=4> vennerdì</option> 
    <option value=5> sabato</option> 
    <option value=6> domenica</option>
    </select>
    <br><br>
    <input type="button" name="pulsante" value="scrivi il contenuto della selezione" onclick="lista_selezione()"><br><br>
    </form>
    <script language="JavaScript">
    var theDayElement= window.document.form1.theDay; 
    document.write("Ci sono "+ theDayElement.length +" opzioni" +"<br>"); 
    var contatore; 
    for (contatore=0; contatore < theDayElement.length; contatore++) // non funziona 
    { 
    document.write("Il testo della opzione "+ contatore + " è " + theDayElement.options[contatore].text +"<br>"); 
    }  
    </script> 
    </body>
    </html>

  2. #12
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,675
    Ciao, il problema principale sta nell'uso di document.write. Non dovresti usarlo o, quantomeno, non dovresti usarlo in quel modo.

    Questa istruzione, se eseguita dopo che la pagina è stata completamente caricata, svuota la pagina stessa rimuovendo l'intero contenuto presente in quel momento perché viene forzata l'apertura di un nuovo documento; cioè sono rimossi tutti i contenuti HTML, gli script e i vari dati in memoria su quella pagina per essere rimpiazzati col nuovo contenuto. E' il caso della tua funzione dentro head, eseguita al click.

    Questo, invece, non avviene se lo script è eseguito prima che sia completato il parsing del documento. E' il caso dello script eseguito (durante il parsing) nel body; questo infatti risulta essere incorporato nel codice HTML perciò viene eseguito runtime e non viene forzata l'apertura di un nuovo documento.

    Ora, nella tua funzione in head, dal momento che hai messo una cosa del genere dentro un ciclo, non appena avviene la prima iterazione viene di conseguenza svuotata la pagina per scrivere la prima stringa di testo (come nuovo documento). Sostanzialmente lo script (non esistendo più) sarà interrotto; per questo vedi solo la scrittura data dalla prima iterazione.

    Questo comportamento può comunque differire da browser a browser. Su IE/Edge lo script viene interrotto, mentre FF e CH (perlomeno le versioni attuali) portano comunque a termine l'esecuzione di tutto lo script prima di svuotare la pagina, per cui il problema non si noterà.

    Ad ogni modo, a meno che tu non abbia un qualche particolare motivo, sarebbe da evitare questo tipo di approccio. Se devi riportare dei risultati sulla pagina, puoi usare un "contenitore" (ad esempio un div) è popolarlo attraverso la proprietà innerHTML (o altri metodi similari).

    Vedi tu che fare. Buon proseguimento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #13
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    211
    Grazie KillerWorm, sei stato gentilissimo e esaurientissimo: hai risolto il problema in tutti i particolari.

    lanvoel

  4. #14
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    588
    Quote Originariamente inviata da lanvoel Visualizza il messaggio
    Grazie KillerWorm, sei stato gentilissimo e esaurientissimo: hai risolto il problema in tutti i particolari.

    lanvoel
    grazie e ti meriti anche un BRAVO...
    La cosa più importante nel programmare è analizzare tutte le possibili strade ed evidentemente questa che hai scritto è una cosa che puo notare solo un esperto di programmazione di un certo livello
    Io avevo subodorato che il "document.write" distruggesse la pagina runtime e percio gli avevo suggerito di passare l'oggetto nella funzione in modo che l'oggetto esistesse ancora nella funzione...
    (lo script che avevo corretto per ultimo)
    Ripeto bravo e un saluto
    Vic53

  5. #15
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    211
    Ciao vic53,
    sono io che devo dire grazie a te e a tutti i moderatori per tutte le risposte e i suggerimenti.
    In particolare ti ringrazio per il "BRAVO".
    Un saluto

    lanvoel

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.