Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    94
    Ciao. Nessuno è in grado di spiegarmi quale sia il problema con le prompt?

    Faccio un esempio semplice per farmi capire meglio:

    codice:
    prompt("Inserisci il tuo nome");
    
    
    function somma(a, b) {
    	return a + b;
    }
    
    
    document.getElementById("demo").innerHTML = somma(5, 11);
    
    
    prompt("Inserisci il tuo cognome");
    Viene eseguita la prima prompt, subito dopo la seconda e infine viene eseguita la funzione.

    Perché le istruzioni non vengono eseguite in ordine?

    Ho provato a cercate risposte ma non ho trovato nulla.

    Se non è possibile eseguire le prompt nel momento giusto (ad esempio nel gioco che sto cercando di fare serve appunto che il giocatore possa inserire informazioni nel momento giusto) ci sono altre soluzioni?

    Grazie e buona domenica.

  2. #12
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Quote Originariamente inviata da Floky Visualizza il messaggio
    Ciao. Nessuno è in grado di spiegarmi quale sia il problema con le prompt?

    Faccio un esempio semplice per farmi capire meglio:

    codice:
    prompt("Inserisci il tuo nome");
    
    
    function somma(a, b) {
        return a + b;
    }
    
    
    document.getElementById("demo").innerHTML = somma(5, 11);
    
    
    prompt("Inserisci il tuo cognome");
    Viene eseguita la prima prompt, subito dopo la seconda e infine viene eseguita la funzione.

    Perché le istruzioni non vengono eseguite in ordine?

    Ho provato a cercate risposte ma non ho trovato nulla.

    Se non è possibile eseguire le prompt nel momento giusto (ad esempio nel gioco che sto cercando di fare serve appunto che il giocatore possa inserire informazioni nel momento giusto) ci sono altre soluzioni?

    Grazie e buona domenica.
    ciao
    partiamo con ordine
    intanto la funzione è un pezzo di codice che deve restituire un valore...
    quindi quando chiami una funzione la sintassi corretta sarebbe per esempio
    risultato=funzione()
    quindi il lancio dei dadi dovrebbe essere per esempio
    codice:
    var risultato = LancioDadi();
    e nella funzione ci sarebbe da fare queste istruzioni
    codice:
    //instruzioni della funzione per trovare quello che ti serve...
    ...
    return valore;
    }
    poi per quanto riguarda la funzione prompt
    anche qui essendo una funzione, hai omesso dove vuoi mettere il valore di quello che l'utente ti scrive
    nel prompt...
    quindi
    codice:
    var nome = prompt("dimmi il tuo nome");
    e poi puoi proseguire con lo studio...

    ricorda che le variabili globali in JAVASCRIPT vanno definite prima di ogni istruzione e fuori dalle funzioni a livello main dopo la sistassi di definizione di script per intenderci e allora le vedrai dapertutto.

    poi una cosa devi capire ... le funzioni non sono codice che viene eseguito se non le richiami espressamente...

    ciao
    Ultima modifica di vic53; 20-03-2017 a 22:24 Motivo: ulteriore appunto
    Vic53

  3. #13
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    94
    Ciao, grazie per la risposta.

    Ahim� non riesco a procedere poich� non ne vengo a capo.. anche le cose che dovrebbero essere semplici mi sembrano contorte.

    1) Variabili globali:

    codice:
    var num = 5;
    
    $(function() {
      $("button").on("click", function() {
        numero += 7;
        $("span1").html(numero); // qui mi stampa 12
       });
    });
    
    $("span2").html(numero); // qui mi ritorna il numero iniziale ovvero 5
    Cosa sbaglio? var num la dovrei usare anche in altri punti quindi mi serve aggiornata. Quando mi esercitavo in python era semplicissima la cosa, una volta che modificavi la variabile dall'interno di una funzione quella globale veniva aggiornata e potevi usarla dove volevi.

    2) PROMPT anche se le metto dentro le variabili es var x = prompt("Hello World!"); vengono eseguite subito e vengono mostrare a schermo prima di altre istruzioni. In un gioco dove si chiede all'utente di inserire dati questo non va bene.

    Ho letto tutto il libro di Javascript & Jquery eppure queste cose non mi sono per nulla chiare.

  4. #14
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Scusa ma qui incrementi
    numero += 7; che non esiste.

  5. #15
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    94
    Quote Originariamente inviata da cassano Visualizza il messaggio
    Scusa ma qui incrementi
    numero += 7; che non esiste.
    Ciao,
    Hai ragione ma era un refuso dovuto a varie prove, prima era var numero.

    Ragazzi mi sto innervosendo perch� continuo ad avere risultati diversi nelle varie prove

    Qui http://stackoverflow.com/questions/1...-of-a-function ai miei stessi dubbi viene risposto, logicamente, che la variabile globale var a pu� essere aggiornata da dentro una funzione. Per far ci� � sufficiente richiamare a (senza var altrimenti si creerebbe una variabile LOCALE con lo stesso nome) e dargli un nuovo valore. PERFETTAMENTE LOGICO.

    Quindi provando Su codepen scrivo:

    codice:
    var a = 10;
    
    
    myFunction();
    
    
    function myFunction() {
      a = 20;
    }
    
    
    alert("Value of 'a' outside the function " + a);
    
    // funziona perfettamente, a � aggiornata a 20
    Se invece volessi richiamare la funzione direttamente in innerHTML mi da undefined:

    codice:
    var a = 10;
    
    
    function myFunction() {
      a = 20;
    }
    
    
    document.getElementById("demo").innerHTML = myFunction();
    
    // da undefined. Se per� dentro la funzione do anche return a; mi viene dato 20
    Come mai i due esempi si comportano diversamente?

    Nel primo anche se non scrivo return, quando richiamo a mi da 20.

    Nel secondo se chiamo direttamente la stessa funzione, se non specifico return, mi da undefined.

    Per la questione delle prompt nessuno pu� darmi qualche spiegazione? Nel libro che ho comprato in 300 pagine non viene menzionato nemmeno una volta prompt e dalle prove che ho fatto si comportano nel modo che vi ho detto.

    Sono un p� amareggiato perch� mi sono letto un libro, letto tutto il tutorial su W3C School, ho fatto tutto il corso su Codecademy eppure sono bloccato con cose che dovrebbero essere relativamente semplici. boh!

    Grazie per la pazienza.

  6. #16
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Semplicemente perche myFunction non restituisce un valore fai cosi:

    function myFunction() {
    return 20;
    }

  7. #17
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Ciao ho cercato di seguire un po' il discorso dall'inizio, ho l'impressione che ti stia perdendo in un bicchiere d'acqua perché, appunto, ti mancano alcune di quelle nozioni base che tutto sommato sono abbastanza logiche, come tu stesso hai scritto.
    E' possibile, da quel che vedo, che tu abbia commesso qualche imprecisione tra le tue varie prove nella stesura del codice (in aggiunta a qualche altro fattore relativo al comportamento stesso del browser e all'interprete JavaScript), con la conseguenza che si sono generati errori e altri problemi vari, i quali ti fanno sembrare assurde quelle cose che invece sono relativamente logiche.

    In linea di massima dovresti cercare di organizzare meglio il tuo script.
    Hai comunque ricevuto varie risposte valide; vorrei personalmente aggiungere diversi dettagli per cercare di chiarire meglio alcuni aspetti.
    Come già è stato detto, cerchiamo di analizzare per ordine i vari punti.

    - Variabili globali

    Nulla di così difficile da capire. Ti sono già state fornite varie risposte e tu stesso hai compreso più o meno come funzionano.
    Se non dichiarate, tutte le variabili a cui si attribuisce un qualche valore, anche se questo avviene dentro una funzione, diventano automaticamente variabili globali.

    In un tuo esempio hai dichiarato var num = 5; a livello principale (quindi globale) e poi hai però usato numero += 7;
    Chiaramente, come tu stesso hai poi capito, è stato un tuo errore "lessicale" (se così possiamo dire) nella stesura del codice.
    In tal caso, oltre a non funzionare come ti saresti aspettato, quello script produce un errore che interrompe l'esecuzione del codice. Infatti, dal momento che la variabile numero non è definita, non è possibile utilizzare l'operatore += che presuppone, appunto, l'esistenza della variabile stessa.

    - Funzioni e l'istruzione return

    Di per sé una funzione non è altro che un blocco di codice messo in memoria, il quale può essere eseguito attraverso l'invocazione della funzione stessa. Nulla di nuovo fin qui.

    La funzione in sé non restituisce comunque nulla, a meno che non si utilizzi l'istruzione return, come giustamente ti ha indicato cassano nell'ultima risposta.

    Riportando i tuoi due esempi dell'ultimo tuo post, e aggiungendo qualche commento:

    codice:
    var a = 10; // dichiaro la variabile e le assegno 10
    myFunction(); // richiamo la funzione che modifica il valore della variabile, ora è 20. La funzione non restituisce comunque nulla
    function myFunction() {
      a = 20;
    }
    alert("Value of 'a' outside the function " + a); // utilizzo la variabile che appunto ha valore 20
    // funziona perfettamente, a è aggiornata a 20
    codice:
    var a = 10; // dichiaro la variabile e le assegno 10
    function myFunction() {
      a = 20;
    }
    document.getElementById("demo").innerHTML = myFunction(); // richiamo la funzione che modifica la variabile ma di fatto non sta restituendo nulla, per cui ottengo undefined
    // da undefined. Se però dentro la funzione do anche return a; mi viene dato 20
    ... puoi renderti conto tu stesso del funzionamento.

    Nel primo caso tu non hai richiamato la funzione per farti restituire il valore della variabile a, ma hai usato direttamente la variabile.
    codice:
    alert("Value of 'a' outside the function " + a);
    Se tu avessi richiamato la funzione, anche qui, come nel secondo caso, avresti ottenuto undefined, proprio perché quella funzione non restituisce nulla.
    codice:
    alert("Value of 'a' outside the function " + myFunction());
    Nel secondo caso, invece, hai richiamato appunto la funzione, che chiaramente non restituisce nulla e quindi ottieni undefined.
    codice:
    document.getElementById("demo").innerHTML = myFunction();
    E' ovvio che se tu avessi richiamato la funzione precedentemente e avessi utilizzato la variabile, avrebbe funzionato come nel primo caso:
    codice:
    var a = 10; // dichiaro la variabile e le assegno 10
    myFunction(); // richiamo la funzione che modifica il valore della  variabile, ora è 20. La funzione non restituisce comunque nulla
    function myFunction() {
      a = 20;
    }
    document.getElementById("demo").innerHTML  = a; // uso la variabile che ora è 20
    Analogamente, è ovvio che se la funzione restituisse il valore voluto, potresti richiamarla direttamente ottenendo tale valore, come tu stesso hai constatato:
    codice:
    var a = 10; // dichiaro la variabile e le assegno 10
    function myFunction() { // questa funzione modifica la variabile è ne restituisce il suo valore
      return a = 20;
    }
    document.getElementById("demo").innerHTML  = myFunction(); // richiamo la funzione che restituisce il valore modificato della variabile: 20
    Chiaramente il fatto di modificare il valore della variabile prescinde da ciò che decidi di far restituire alla funzione stessa.
    Infatti la soluzione di cassano è questa:
    codice:
    function myFunction() {
    return 20;
    }
    dove la variabile non è stata nemmeno utilizzata perché, in questo contesto, vale ciò che la funzione restituisce.
    Il precedente esempio ha lo stesso risultato a prescindere dall'uso della variabile:
    codice:
    function myFunction() { // questa funzione restituisce il valore 20
      return 20;
    }
    document.getElementById("demo").innerHTML = myFunction(); // richiamo la funzione che restituisce il valore 20
    .

    - Il prompt

    Riguardo il metodo prompt() è preferibile (a mio parere) non utilizzarlo, ma usare sistemi alternativi (ad esempio un plugin JavaScript/jQuery). La documentazione stessa, e diverse guide, consigliano di non abusare di tale metodo perché questo interrompe di fatto l'esecuzione dello script e impedisce, all'utente, di agire su qualsiasi altro controllo della finestra finché il prompt stesso non sarà chiuso (così come per le altre finestre modali: alert e confirm)

    Ora, tu hai riportato questo esempio:
    codice:
    prompt("Inserisci il tuo nome");
    function somma(a, b) {
        return a + b;
    }
    document.getElementById("demo").innerHTML = somma(5, 11);
    prompt("Inserisci il tuo cognome");
    in cui hai notato che il secondo prompt viene eseguito prima dell'innerHTML.
    Qui ci sarebbe da scrivere un romanzo ma cerco di farla breve per farti capire cosa è andato storto e perché sarebbe meglio utilizzare, piuttosto, delle soluzioni alternative alle finestre modali native.

    Il problema è legato più che altro ad innerHTML e alla gestione video del runtime JavaScript, piuttosto che al prompt() in sé.
    In particolare la proprietà innerHTML agisce sugli elementi in modo visivo. A livello di esecuzione del codice, sarà necessario quindi un refresh video perché si possano vedere (a video) gli effetti apportati dopo la modifica di tale proprietà.
    L'esecuzione dello script è comunque eseguita secondo l'ordine in cui tu hai scritto le varie istruzioni. Quindi, a li vello di codice, tale proprietà (innerHTML) viene regolarmente aggiornata dopo il primo prompt e prima che sia lanciato il secondo. Ciò che avviene, è che non vedi aggiornata la pagina finche non è finita l'esecuzione dell'intero blocco di script, che viene "ostaccolata" dai due prompt.

    Direi che i motivi siano da ricercare quindi a livello tecnico. Il discorso ricade sulla gestione del thread e quindi del ciclo di elaborazione del runtime JavaScript.

    Di fatto, nel tuo esempio sta avvenendo questo:

    - lancio il primo prompt (che interrompe il runtime fino alla chiusura del prompt stesso)
    - applico innerHTML (che viene regolarmente eseguito a livello di esecuzione del codice, per cui la proprietà risulta aggiornata dopo questa riga)
    - lancio il secondo prompt (di nuovo, esecuzione interrotta fino a chiusura)
    - infine il runtime JavaScript esegue il refresh video mostrando il risultato

    Ora, è curioso notare che il risultato "visivo" varia a seconda del browser utilizzato. Testando su Firefox e IE11 , noto infatti che il risultato è più affidabile relativamente a ciò che ci si aspetterebbe. Cioè, a video, vedo subito l'aggiornamento dopo la chiusura del primo prompt, a differenza di altri browser su cui ho testato (Chrome e Edge).

    Come ti ho indicato, dal momento che questi controlli (come altri) e i loro risultati (più che altro visivi, se non a livello funzionale) sono affidati al browser stesso che si sta utilizzato, è preferibile utilizzare delle soluzioni via codice, ad esempio script o plugin Javascript/jQuery, che è possibile personalizzare al meglio, che vengono eseguiti magari in overlay integrandosi dentro la pagina HTML, e che non influiscono/bloccano le funzionalita della finestra del browser e l'esecuzione stessa dello script.

    Chiaramente dovrai valutare tu come meglio procedere.

    Perdona la lungaggine, spero solo di non averti confuso maggiormente le idee
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #18
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    94
    Ciao, ringrazio tutti per le risposte precedenti e KillerWorm per la risposta molto esaustiva che mi ha chiarito le idee.

    In effetti, era arrivato (a scoppio ritardato) a capire che nel primo caso richiamassi la variabile globale a. La funzione non ritornava nulla ma effettivamente modificava la variabile.

    Il secondo caso invece non riuscivo a capirlo ma ora l'ho compreso.

    Per le prompt non ci sarei mai arrivato. Avevo cercato spiegazioni ma non ne avevo trovate. Ora � chiaro tutto, infatti utilizzo chrome.

    Le alternative che consigli credo di non essere ancora in grado di utilizzarle visto che sono agli inizi. Seguendo un esempio sul libro che sto leggendo invece delle prompt stavo provando ad usare delle input.

    In pratica appena si lanciano i dadi, affianco al punteggio faccio comparire un altro pulsante (<button>Cambia numero</button>) che se schiacciato fa comparire una input (dove inserire il numero) e un input submit. Sull'esempio usano il metodo preventDefault e da quanto mi sembra di aver capito (correggimi se sbaglio) previene il comportamento di default che dovrebbe essere eseguito, in questo caso inviare il form, cosa che a me non serve dato che mi serve solo immagazzinare il valore della input in una variabile che poi utilizzer� per fare delle comparazioni successivamente.

    Pu� andare come soluzione?

    Cmq in linea teorica pensavo fosse pi� facile questo esercizio

    Grazie a tutti ad ogni modo.

  9. #19
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Le alternative che consigli credo di non essere ancora in grado di utilizzarle visto che sono agli inizi. Seguendo un esempio sul libro che sto leggendo invece delle prompt stavo provando ad usare delle input.
    In questo caso, già un semplice input credo sia più appropriato rispetto al prompt. Probabilmente l'esercizio propone l'utilizzo di controlli nativi (come il prompt) per semplificare alcuni processi, non considerando però le varie ed eventuali problematiche collaterali.

    In pratica appena si lanciano i dadi, affianco al punteggio faccio comparire un altro pulsante (<button>Cambia numero</button>) che se schiacciato fa comparire una input (dove inserire il numero) e un input submit. Sull'esempio usano il metodo preventDefault e da quanto mi sembra di aver capito (correggimi se sbaglio) previene il comportamento di default che dovrebbe essere eseguito, in questo caso inviare il form, cosa che a me non serve dato che mi serve solo immagazzinare il valore della input in una variabile che poi utilizzer� per fare delle comparazioni successivamente.

    Pu� andare come soluzione?
    Sì, hai capito bene, preventDefault serve proprio ad annullare l'azione di default per quel determinato controllo. In questo caso l'elemento input submit non eseguirà l'invio dei dati del form. Quell'input si comporterà praticamente come un semplice button.
    A dirla tutta, in questo caso non avresti nemmeno bisogno di un input submit, e tantomeno di un form.
    Teoricamente potresti quindi impostare i vari input senza il form.

    Cmq in linea teorica pensavo fosse pi� facile questo esercizio
    Beh, certo, in teoria è tutto molto semplice; è nella pratica che le cose si complicano

    Citando Einstein:
    La teoria e' quando si sa tutto ma non funziona niente. La pratica e' quando funziona tutto ma non si sa il perche'. In ogni caso si finisce sempre con l'unire le due cose: non funziona niente e non si sa il perche'.
    Boun proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #20
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    signori non chiudo.....ma la prossima volta ricordate che il forum non è una guida personalizzata. per quello esistono le guide di html
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


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