Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153

    Ritardare esecuzione form

    Salve a tutti, io ho un problemino che forse è una stupidaggine eppure mi sta facendo perdere un sacco di tempo e, pertanto, chiedo lumi a chi ne sa più di me.

    Allora io ho un normalissimo campo form per l'invio dati tramite post che al momento del click sul tasto dell'invio esegue una funziona onClick; insomma si tratta di un banalissimo:

    <input type="submit" onclick="funzione();return true;" value="Invia" />

    Il mio problema è che la funzione che viene eseguita ci mette alcuni secondi e restituisce alcuni risultati a video che l'utente dovrebbe visionare. Tuttavia quando si clicca sul pulsante il form viene immediatamente inviato e la pagina è aggiornata, impedendo quindi di vedere i risultati della funzione. Se io metto "return false;" chiaramente blocco l'esecuzione del form e la funzione svolge correttamente tutto ciò che deve... a questo punto mi chiedevo se esiste la possibilità di ritardare l'invio del form, ossia se dopo il click del mouse sul pulsante la funzione venisse eseguita ma il form non venisse inviato immediatamente, ritardando anche solo di qualche secondo.
    Ho provato con cose timo setTimeout() ma in questo modo ritardo l'esecuzione di tutta la funzione. Invece io vorrei che la funzione venisse eseguita ma che l'invio dei dati del form venisse ritardato di qualche secondo.

    E' possibile una cosa del genere?

  2. #2
    Ciao,

    hai provato ad utilizzare setTimeout() in modo da chiamare una funzione (dopo n secondi) che invia il form (ovvero form.submit())?
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153
    Allora, non ho usato form.submit perchè per l'invio dei dati uso semplicemente il campo form...
    cioè io ho una situazione del tipo:

    <form action="pagina.php" method="post">

    .
    .
    .
    parametri form
    .
    .
    .
    <input type="submit" onClick="funzione();return true;" value="Invia" />
    </form>

    Quindi cliccando sull'apposito tasto i dati vengono inviati regolarmente...

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    non gestire l' onclick sul submit ma lascia che sia il form a gestire il proprio onsubmit

    se il form non va inviato immediatamente non c'e' altro da fare che ritornare false all' onsubmit del form
    in pratica impedisci il naturale submit, lo forzerai al termine della temporizzazione via javascript


    <form name="nomeForm" onsubmit="funzione();setTimeout(function(){documen t.nomeForm.submit()},3000);return false">

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153
    Originariamente inviato da Xinod
    non gestire l' onclick sul submit ma lascia che sia il form a gestire il proprio onsubmit

    se il form non va inviato immediatamente non c'e' altro da fare che ritornare false all' onsubmit del form
    in pratica impedisci il naturale submit, lo forzerai al termine della temporizzazione via javascript


    <form name="nomeForm" onsubmit="funzione();setTimeout(function(){documen t.nomeForm.submit()},3000);return false">
    Avevo pensato ad una soluzione del genere ma non mi funziona correttamente. Avevo impostato un window.open() nell'onSubmit per gestire in ritardo l'apertura della pagina di destinazione, ma il problema è che così non mi vengono inviati tramite POST i parametri del form. Con form.submit viene inviato regolarmente?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153
    Sono riuscito a risolvere il problema e se può interessare vi spiego la procedura:

    per prima cosa anzichè il tag <input type="submit" value="invia" /> che produce l'invio immediato del form ho messo un più generico <input type="button" value="invia" />

    In questa maniera quando io clicco sul pulsante il form non parte e io posso gestire tutto da un onclick che inserisco nel tasto stesso. In pratica il mio pulsante esce così:

    <input type="button" onclick="accesso();" value="Invio" />

    A questo punto il gioco è fatto, perchè tutto viene gestito direttamente dal javascript, compresa la funzione di invio del form. In pratica la funzione accesso() dovrebbe essere una cosa del genere:

    function accesso() {
    .
    .
    .
    codice da eseguire
    .
    .
    .
    setTimeout(function() {document.nomeform.submit();}, 10000);

    return false;
    }


    In questa maniera posso gestire senza alcun problema il ritardo nell'invio del form e far eseguire tutte le funzioni che mi interessano prima che il form parta.
    L'unico difetto di questo metodo è che, a questo punto, l'utente deve PER FORZA cliccare sul pulsante "Invia" per far eseguire il form. Se compila i campi e batte semplicemente il tasto invio sulla tastiera non funzionerà.
    Ma se si vuole fare gli sboroni anche questo è facilmente risolvibile: basta inserire in ciascuno dei campi del form (o, eventualmente, solo in quelli che si vuole causino l'invio del form con la pressione del tasto) un evento del tipo onkeypress="tasto(event);"

    A questo punto basterà scrivere la funzione tasto() in questo modo:

    function tasto(e)
    {
    if (e.keyCode == 13) {
    accesso();
    return true;
    }
    else {
    return false;
    }
    }

    In questo modo se alla pressione del tasto viene rilevata la pressione dell'invio, lui esegue la funzione accesso() (che, a sua volta, invierà il form dopo il timeout definito), altrimenti se il tasto premuto è diverso, non fa niente.

    Spero di essere stato chiaro e, soprattutto, utile

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    scusa ma secondo te perche' ti ho consigliato di spostare tutto nell' onsubmit del form?
    perche' altrimenti il form non funziona senza supporto a javascript

    il submit resta un submit
    il form diventa
    <form ... onsubmit="accesso();return false">

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153
    Originariamente inviato da Xinod
    scusa ma secondo te perche' ti ho consigliato di spostare tutto nell' onsubmit del form?
    perche' altrimenti il form non funziona senza supporto a javascript

    il submit resta un submit
    il form diventa
    <form ... onsubmit="accesso();return false">
    Però così non va bene, perchè quando tu clicchi sul pulsante di invio del form lui ti esegue sia il form che le funzioni nell'onsubmit.
    Mi spiego meglio:

    <form action="pagina.php" method="POST" onsubmit="accesso();return false;">

    Se io ho una cosa del genere e clicco sul pulsante per inviarlo lui carica la pagina "pagina.php" ed esegue le funzioni onsubmit. Non riesco quindi a ritardare l'esecuzione del form perchè il setTimeout è all'interno della funzione accesso(); mentre il riferimento alla nuova pagina da caricare è nell'attributo ACTION che, invece, viene eseguito immediatamente al click sul pulsante. In pratica in questa maniera mi eseguirebbe il form due volte: una subito e una dopo il numero di secondi impostati e dopo aver eseguito tutta la funzione accesso().

    La maniera ottimale per risolvere è avere un pulsante (o un link) che non faccia il submit del form ma che esegua la funzione accesso() la quale, a sua volta, farà il submit del form.

    Poi non so se dipende dal tipo di funzione utilizzata, come ti ho detto non sono espertissimo di javascript però se, ad esempio, io nell'onsubmit mettessi un alert() o un confirm() allora effettivamente non mi fa andare avanti finchè non clicco. Ma nello script che ho fatto io, con le funzioni che ho utilizzato lui esegue l'onsubmit mentre carica anche la pagina. Tutto qui.

    EDIT: domando scusa... ho riprovato proprio adesso nel modo che hai detto tu ed effettivamente funziona.
    Allora davvero non so che cavolo di pasticci facevo ieri quando non mi andava...
    Comunque ti ringrazio delle ulteriori spiegazioni.

  9. #9
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    no problem
    sono contento tu abbia risolto nel migliore dei modi
    ciao

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.