Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    chiamate funzioni strane

    Ciao
    Come mai se faccio così:

    codice:
    document.addEventListener("click", fun, false);
    
    function fun(){ ... }
    se chiamo la funzione senza parentesi la funzione non va se ci metto le parenti funziona

    codice:
    document.addEventListener("click", fun(), false);
    così funziona

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da techno Visualizza il messaggio
    Ciao
    Come mai se faccio così:
    ...

    così funziona
    Ciao
    "funziona" o no non vuol dire gran ché, dovresti essere più preciso, comunque una situazione del genere POTREBBE essere causato magari dal fatto che funzione "fun" (alla quale cambierei nome...) restituisce un altra funzione che magari è quella che ti aspetti risponda poi all'evento. senza parentesi invece viene chiamata la funzione "fun" e non il suo risultato, per cui potrebbe essere questo l'errore, ma non hai nemmeno messo il codice di "fun" e non hai dato elementi a sufficienza per poterlo affermare.

  3. #3
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    Il modo corretto è il primo, tra l'altro non devi specificare le parentesi anche se alla funzione vengono passati argomenti quando viene richiamata dell'addEventListener.
    Inoltre il false lo puoi omettere visto che indica la propagazione di default dell'evento.
    Ovviemente se dici che per te funziona bisogna necessariamente capire cosa stai cercando di ottenere, nel secondo caso la fun() potrebbe essere eseguita automanticamente all'apertura del documento, ma non è il giusto comportamento dell'evento messo in ascolto.

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da ninja72 Visualizza il messaggio
    Il modo corretto è il primo, tra l'altro non devi specificare le parentesi anche se alla funzione vengono passati argomenti quando viene richiamata dell'addEventListener...
    Se prendiamo questo caso no se il mio intento è far scattare l'alert:
    codice:
    function fun(){return ()=>alert('Ciao');}
    al contrario sarebbe il primo metodo quello sbagliato.
    e nel caso voglia passare dei parametri usi per forza le parentesi. Supponiamo questo caso:
    codice:
    document.addEventListener("click", fun('Ciao'), false);
    function fun(txt){return ()=>alert(txt);}
    "fun('ciao')" viene eseguito nel momento in cui viene aggiunto l'evento, per cui viene restituito l'alert con il valore di testo "ciao", e quando si scatena l'evento viene eseguito con appunto il testo 'ciao' passato tra le parentesi.
    Tutto dipende da com'è stato scritto il codice. Poi se si tratta di un discorso di come andrebbe scritto il codice credo sia difficile determinarlo in maniera oggettiva.
    Ultima modifica di U235; 06-09-2021 a 15:29

  5. #5
    Quote Originariamente inviata da ninja72 Visualizza il messaggio
    Il modo corretto è il primo, tra l'altro non devi specificare le parentesi anche se alla funzione vengono passati argomenti quando viene richiamata dell'addEventListener.
    Inoltre il false lo puoi omettere visto che indica la propagazione di default dell'evento.
    Ovviemente se dici che per te funziona bisogna necessariamente capire cosa stai cercando di ottenere, nel secondo caso la fun() potrebbe essere eseguita automanticamente all'apertura del documento, ma non è il giusto comportamento dell'evento messo in ascolto.

    quello che ce nella funzione e ininfluente la funzione senza le parentesi () non parte proprio anche se dentro ce un semplice alert
    a differenza se metto le parentesi () la funzione parte
    Il nome della funzione "fun" e solo per esempi oanche se ci metto come nome pincopallino fa la identica cosa

  6. #6
    Questo è quello che devo fare per farlo funzionare:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", () => {  dwnApp() });
    Se invece faccio in questo modo:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp());
    La funzione parta all'avvio del documento

    se invece faccio cosi chiamando la funzione senza la parentesi:
    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp);
    la funzione non parte

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da techno Visualizza il messaggio
    quello che ce nella funzione e ininfluente la funzione senza le parentesi () non parte proprio anche se dentro ce un semplice alert
    a differenza se metto le parentesi () la funzione parte
    Il nome della funzione "fun" e solo per esempi oanche se ci metto come nome pincopallino fa la identica cosa
    Sono io che ti parlavo del nome, ma lo dicevo non perché fosse la soluzione al problema, ma per dire che io ne avrei usato un altro, ma era fine a se stesso.

    Quello che c'è dentro la funzione è fondamentale invece... vedi l'esempio sopra, poi cambialo in questo:
    codice:
    document.addEventListener("click", fun, false);
    function fun(){alert('ciao');}
    e si rivolta tutto il discorso, ovvero: se metti le parentesi non funziona (viene eseguito solo al caricamento ma non quando scatta l'evento)
    Ultima modifica di U235; 06-09-2021 a 16:13

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da techno Visualizza il messaggio
    Questo è quello che devo fare per farlo funzionare:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", () => {  dwnApp() });
    Se invece faccio in questo modo:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp());
    La funzione parta all'avvio del documento

    se invece faccio cosi chiamando la funzione senza la parentesi:
    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp);
    la funzione non parte
    Appunto... il problema molto probabilmente sta in qualcosa che si blocca prima. Guarda un esempio con solo poca roba:
    codice:
    <button id='btUpdate'>
    test
    </button>
    ....
    ....
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp);
    function dwnApp(){alert('ciao');}
    Funziona senza problemi. Ma ti basta un piccolo errore di sintassi :
    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp);
    function dwnApp(){ . alert('ciao');}//nota il punto dopo la prima graffa
    e questo non funziona più... il codice all'interno della funzione va in errore. Quindi senza sapere il tipo di errore il problema potrebbe essere esattamente nel codice dentro la funzione.
    Hai provato a mettere qualche punto di interruzione per vedere dove si blocca?
    Ultima modifica di U235; 06-09-2021 a 16:10

  9. #9
    Questo è quello che devo fare per farlo funzionare:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", () => {  dwnApp() });
    Se invece faccio in questo modo:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp());
    La funzione parta all'avvio del documento

    se invece faccio cosi chiamando la funzione senza la parentesi:
    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp);
    la funzione non parte

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    Quote Originariamente inviata da techno Visualizza il messaggio
    Questo è quello che devo fare per farlo funzionare:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", () => {  dwnApp() });
    Se invece faccio in questo modo:

    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp());
    La funzione parta all'avvio del documento

    se invece faccio cosi chiamando la funzione senza la parentesi:
    codice:
    const btUpApp = document.querySelector("#btUpdate");
    btUpApp.addEventListener("click", dwnApp);
    la funzione non parte

    non lo hai già scritto mezz'ora fa questo? errore di invio?

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.