Evita l'eliminazione modale alla pressione del tasto Invio


107

Ho impostato un modale bootstrap con un modulo al suo interno, ho appena notato che quando premo il tasto Invio, il modale viene ignorato. C'è un modo per non chiuderlo premendo Invio?

Ho provato ad attivare il modale con la tastiera: false, ma questo impedisce il licenziamento solo con il tasto ESC.


Mi piace questa domanda. Perché non modificare semplicemente il codice sorgente del plugin?
Ryan

Lo esaminerò, se trovo qualcosa di utile lo modifico. Nel frattempo, spero che qualcuno sappia la risposta.
Luke Morgan

Sono passato da click.dismiss.modal a keyup, sembra a posto, controllerò di nuovo più tardi per vedere se ho sbagliato qualcos'altro
Luke Morgan

Sì, quello ha sbagliato i pulsanti (ho aggiunto un onclick = "$ ('# signinModal'). Modal ('hide');" per evitare questi problemi, ora va tutto bene, a quanto pare)
Luke Morgan

Risposte:


122

Anch'io ho avuto questo problema.
Il mio problema era che avevo un pulsante di chiusura nel mio modale

<button class="close" data-dismiss="modal">&times;</button>

La pressione di Invio nel campo di immissione ha causato l'attivazione di questo pulsante. L'ho cambiato in un ancoraggio e ora funziona come previsto (invio invia il modulo e non chiude il modale).

<a class="close" data-dismiss="modal">&times;</a>

Senza vedere la tua fonte, non posso confermare che la tua causa sia la stessa.


No, nessun pulsante utilizzato, ho usato gli elementi <a>, immagino sia qualcos'altro. Il codice che uso è fondamentalmente il codice di esempio sulla pagina bootstrap, solo con un modulo aggiunto all'interno
Luke Morgan

Non ho visto il pulsante nell'angolo in alto a destra, quello era il problema. Ora funziona bene, grazie!
Luke Morgan

+1, scoperta eccellente! Mi chiedo se qualcuno lo abbia inserito nel tracker dei problemi di bootstrap? Al momento sono troppo pigro per controllare. Forse dopo pranzo.
Andrew

8
Non è solo una questione di pulsanti. Ho rimosso tutti i pulsanti dal mio modale (inclusa la "x" in alto a destra), ma se ho un unico campo di testo del modulo, premendo Invio la finestra di dialogo verrà chiusa. Stranamente è solo un problema quando c'è un singolo campo di testo. Una volta che ne ho due, Invio non elimina il modello, indipendentemente dal campo attivo.
jpeskin

11
si può usare type = "button" sul pulsante di annullamento
Muayyad Alsadi


19

Ho avuto questo problema anche dopo aver rimosso TUTTI i pulsanti dal mio Bootstrap Modal, quindi nessuna delle soluzioni qui mi ha aiutato.

Ho scoperto che un modulo con un singolo campo di testo farebbe sì che il browser invii un modulo (e risulti chiuso), se premi Invio mentre lo stato attivo della tastiera è sul campo di testo. Questo sembra essere più un problema di browser / modulo di qualsiasi altra cosa con Bootstrap.

La mia soluzione era impostare l'attributo onsubmit del modulo su onsubmit = "return false"

Questo potrebbe essere un problema se stai effettivamente utilizzando l'evento submit, ma sto usando framework JS che generano richieste AJAX piuttosto che eseguire un submit del browser, quindi preferisco disabilitare completamente l'invio. (Significa anche che non devo modificare manualmente ogni elemento del modulo che potrebbe attivare un invio).

Maggiori informazioni qui: le finestre di dialogo modali Bootstrap con un singolo campo di immissione di testo si chiudono sempre con il tasto Invio


2
Avevo già type="button"tutti i miei pulsanti di chiusura / annullamento, ma avevo ancora questo problema con il tasto Invio che chiudeva il mio modale. Avevo solo 1 campo di testo di input nel mio modale e la tua soluzione lo ha risolto. Grazie per la tua risposta!
Darren Parker

7

Puoi mettere il pulsante di accesso prima del pulsante di annullamento e questo risolverebbe anche il problema che stai riscontrando.

<div class="modal-footer">
    <button type="submit" class="btn primary">Login</button>
    <button type="submit" class="btn" data-dismiss="modal">Cancel</button>
</div>


5

Ho avuto lo stesso problema e l'ho risolto con

<form onsubmit="return false;">

ma c'è un'altra soluzione, puoi aggiungere un input invisibile fittizio, quindi il tuo modulo sarebbe simile a questo:

<form role="form" method="post" action="submitform.php">
    <input type="text" id="name" name="name" >
    <input type="text" style="display: none;">
</form>

3

Ho avuto un'esperienza simile proprio ora e il modo in cui l'ho risolto è stato invece di utilizzare un tag, ho cambiato il tag in un tag con type = "button". Questo sembrava risolvere il problema di premere il tasto "invio" e chiudere il bootstrap modal.


2

Anch'io ho avuto questo problema e l'ho risolto in questo modo. Ho aggiunto l'invio al modulo. Volevo anche essere in grado di utilizzare il tasto Invio come chiave di salvataggio, quindi ho aggiunto javascript save_stuff () a onsubmit. return false; viene utilizzato per impedire l'invio del modulo.

<form onsubmit="save_stuff(); return false;">
 ...
</form>

<script>
    function save_stuff(){
      //Saving stuff
    }
</script>
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.