form senza alcuna azione e dove enter non ricarica la pagina


94

Sto cercando il modo più pulito per creare un modulo HTML che non ha un pulsante di invio. Già questo è abbastanza facile, ma devo anche impedire al modulo di ricaricarsi da solo quando vengono eseguite operazioni simili alla sottomissione (ad esempio, premendo Enterin un campo di testo).


Vuoi che non si sottometta mai?
UpTheCreek

Se hai solo un <form> con un singolo <input> che è un campo di testo, non dovrebbe essere inviato quando premi invio, giusto?
Zack The Human,

Voglio che si sottometta a qualche altra condizione (in effetti premendo un certo pulsante). Il problema è che non sono riuscito a far sì che il comportamento di "invio nel campo di testo" di pubblicazione / accesso allo stesso URL non avvenga. Quindi il mio modulo creato con cura, in cui devi fare X, Y e Z per farlo inviare, può essere erroneamente inviato dall'utente premendo Invio.
Matt Roberts

Risposte:


44

Aggiungi un gestore onsubmit al modulo (tramite js normale o jquery $ (). Submit (fn)) e restituisci false a meno che non siano soddisfatte le tue condizioni specifiche.

A meno che tu non voglia che il modulo venga inviato, mai - nel qual caso, perché non escludere l'attributo "action" nell'elemento del modulo?


150
Un modulo senza un actionattributo non è un modulo, secondo gli standard, e in alcuni browser causerà il ricaricamento di una pagina. Ho scoperto che action="javascript:void(0);"funziona bene.
Dutchie432

La risposta degli olandesi funziona perfettamente. Firefox stava solo aggiornando la pagina.
IAmGroot

1
@ Dutchie432 dovrebbe trasformarlo in una risposta invece che in un commento. Quindi sarebbe arrivato in cima a cui appartiene. In alternativa, KPrime potrebbe modificare la sua risposta, poiché omettere l'azione non ha funzionato per me ...
saggio

211

Ti consigliamo di includere action="javascript:void(0);"nel modulo per impedire il ricaricamento della pagina e mantenere lo standard HTML.


4
Ho appena trascorso 2 giorni cercando di sopprimere l'azione predefinita del pulsante di invio quando viene premuto Invio, perché sebbene l'azione sia stata eseguita, la pagina è stata ricaricata (Firefox). L'aggiunta del javascript void come azione sul modulo lo ha risolto. Grazie per quello.
Tony Payne

grazie per questa ulteriore risposta. funziona ancora, ma è ancora la soluzione "all'avanguardia" nel 2016?
low_rents

1
@low_rents Lo uso ancora tutto il tempo e personalmente non ho trovato una soluzione migliore.
Dutchie432

1
Grazie per la precisa e un'ottima soluzione per risolvere il ricaricamento della pagina premendo il tasto Invio :) Soluzione migliore.
Imran Rafiq Piuttosto il

9

Aggiungi semplicemente questo evento al tuo campo di testo. Impedirà un invio premendo Invio e sei libero di aggiungere un pulsante di invio o chiamare form.submit () come richiesto:

onKeyPress="if (event.which == 13) return false;"

Per esempio:

<input id="txt" type="text" onKeyPress="if (event.which == 13) return false;"></input>

1
Grazie per questo. Temo che la chiarezza della tua risposta mi abbia chiarito la correttezza di una risposta precedente, quindi non ottieni la risposta accettata ma ottieni la mia gratitudine e un voto positivo!
Matt Roberts

2
Grazie. Felice di aiutare. Comunque non sono mai stato uno dei riflettori. ;)
GenericMeatUnit

5

Quando si preme invio in un form il comportamento naturale del form è quello di essere sottomesso, per fermare questo comportamento che non è naturale, è necessario impedirne l'invio (comportamento predefinito), con jquery:

$("#yourFormId").on("submit",function(event){event.preventDefault()})

4

un'idea:

<form method="POST" action="javascript:void(0);" onSubmit="CheckPassword()">
    <input id="pwset" type="text" size="20" name='pwuser'><br><br>
    <button type="button" onclick="CheckPassword()">Next</button>
</form>

e

<script type="text/javascript">
    $("#pwset").focus();
    function CheckPassword()
    {
        inputtxt = $("#pwset").val();
        //and now your code
        $("#div1").load("next.php #div2");
        return false;
    }
</script>

1

Due modi per risolvere:

  1. il valore dell'azione del modulo è "javascript: void (0);".
  2. aggiungere un listener di eventi di pressione dei tasti per il modulo per impedire l'invio.

L'ascolto di un evento di pressione di un tasto (ad es. Tasto Invio) può causare problemi con se textarea, eventualmente, selezionare il completamento automatico o gli elenchi a discesa, e il dispositivo mobile potrebbe essere un'altra fonte di problemi.
luckydonald

0

La prima risposta è la soluzione migliore:

Aggiungi un gestore onsubmit al modulo (tramite js normale o jquery $ (). Submit (fn)) e restituisci false a meno che non siano soddisfatte le tue condizioni specifiche.

Più specifico con jquery:

$('#your-form-id').submit(function(){return false;});

A meno che tu non voglia che il modulo venga inviato, mai - nel qual caso, perché non escludere l'attributo "action" nell'elemento del modulo?

La scrittura di estensioni di Chrome è un esempio di dove potresti avere un modulo per l'input dell'utente, ma non vuoi che venga inviato. Se usi action = "javascript: void (0);", il codice probabilmente funzionerà ma ti ritroverai con questo problema cui riceverai un errore sull'esecuzione di Javascript in linea.

Se si tralascia completamente l'azione, il modulo verrà ricaricato, il che in alcuni casi è anche indesiderato quando si scrive un'estensione di Chrome. O se avessi una pagina web con una sorta di calcolatrice incorporata, in cui l'utente fornirebbe un input e fare clic su "Calcola" o qualcosa del genere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.