Unikaj modalnego odrzucania po naciśnięciu klawisza Enter

108

Skonfigurowałem modal bootstrap z formularzem w środku, właśnie zauważyłem, że kiedy naciskam klawisz Enter, modal zostaje odrzucony. Czy jest sposób, aby nie odrzucić go po naciśnięciu klawisza Enter?

Próbowałem aktywować modal za pomocą klawiatury: false, ale to zapobiega tylko zwolnieniu klawiszem ESC.

Luke Morgan
źródło
Podoba mi się to pytanie. Dlaczego po prostu nie edytować kodu źródłowego wtyczki?
Ryan
Przyjrzę się temu, jeśli znajdę coś przydatnego, poprawię. W międzyczasie mam nadzieję, że ktoś zna odpowiedź.
Luke Morgan
Zmieniłem z click.dismiss.modal na keyup, wydaje się dobrze, sprawdzę później, czy nie schrzaniłem czegoś innego
Luke Morgan
Tak, to spieprzyło przyciski (dodałem onclick = "$ ('# signinModal'). Modal ('hide');" aby uniknąć tych problemów, teraz wszystko jest w porządku, wydaje się)
Luke Morgan

Odpowiedzi:

122

Ja też miałem ten problem.
Mój problem polegał na tym, że miałem przycisk zamykający w moim modalu

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

Naciśnięcie Enter w polu wprowadzania spowodowało uruchomienie tego przycisku. Zamiast tego zmieniłem go na kotwicę i teraz działa zgodnie z oczekiwaniami (enter przesyła formularz i nie zamyka modalu).

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

Nie widząc twojego źródła, nie mogę jednak potwierdzić, że twoja sprawa jest taka sama.

vish
źródło
Nie, nie użyłem żadnych przycisków, użyłem elementów <a>, myślę, że to coś innego. Kod, którego używam, to w zasadzie przykładowy kod na stronie bootstrap, tylko z formularzem dodanym w środku
Luke Morgan
Nie widziałem przycisku w prawym górnym rogu, to był problem. Teraz działa dobrze, dzięki!
Luke Morgan
+1, doskonałe znalezisko! Ciekawe, czy ktoś umieścił to w trackerze problemów bootstrap? Jestem zbyt leniwy, żeby to sprawdzić. Może po obiedzie.
Andrew
8
To nie jest tylko kwestia przycisków. Usunąłem wszystkie przyciski z mojego modalu (w tym prawy górny „x”), ale jeśli mam jedno pole tekstowe formularza, naciśnięcie klawisza Enter spowoduje zamknięcie okna dialogowego. O dziwo, problem występuje tylko wtedy, gdy jest jedno pole tekstowe. Gdy mam dwa, Enter nie odrzuca modelu bez względu na to, które pole jest aktywne.
jpeskin
11
można użyć type = "button" na przycisku anulowania
Muayyad Alsadi
19

Miałem ten problem nawet po usunięciu WSZYSTKICH przycisków z mojego Bootstrap Modal, więc żadne z rozwiązań tutaj nie pomogło.

Zauważyłem, że formularz z pojedynczym polem tekstowym spowodowałby wysłanie formularza przez przeglądarkę (i spowodowałoby odrzucenie), jeśli naciśniesz Enter, gdy fokus klawiatury znajduje się na polu tekstowym. Wydaje się, że jest to bardziej problem z przeglądarką / formularzem niż cokolwiek z Bootstrap.

Moim rozwiązaniem było ustawienie atrybutu onsubmit formularza na onsubmit = "return false"

Może to być problem, jeśli faktycznie używasz zdarzenia przesyłania, ale używam struktur JS, które generują żądania AJAX, zamiast wykonywać wysyłanie przez przeglądarkę, więc wolę całkowicie wyłączyć przesyłanie. (Oznacza to również, że nie muszę ręcznie dostosowywać każdego elementu formularza, który może wywołać przesłanie).

Więcej informacji tutaj: Modalne okna dialogowe Bootstrap z pojedynczym polem tekstowym są zawsze odrzucane po naciśnięciu klawisza Enter

jpeskin
źródło
2
Miałem już type="button"na wszystkich przyciskach zamykania / anulowania, ale nadal miałem ten problem z klawiszem enter zamykającym mój modal. Miałem tylko jedno pole tekstowe w moim modalu, a twoje rozwiązanie to naprawiło. Dziękuję za odpowiedź!
Darren Parker
7

Możesz umieścić przycisk logowania przed przyciskiem anulowania, co również rozwiązałoby problem, który masz.

<div class="modal-footer">
    <button type="submit" class="btn primary">Login</button>
    <button type="submit" class="btn" data-dismiss="modal">Cancel</button>
</div>
Ryan
źródło
6
Anuluj nie należy wpisywać przesłać
Manatax
5

Miałem ten sam problem i rozwiązałem go z

<form onsubmit="return false;">

ale jest jeszcze jedno rozwiązanie, możesz dodać fikcyjne niewidoczne dane wejściowe, aby Twój formularz wyglądał tak:

<form role="form" method="post" action="submitform.php">
    <input type="text" id="name" name="name" >
    <input type="text" style="display: none;">
</form>
Igor Lovrić
źródło
3

Miałem teraz podobne doświadczenie i sposób, w jaki to rozwiązałem, polegał na tym, że zamiast używać tagu, zmieniłem tag na tag z type = "button". Wydawało się, że rozwiązuje to problem związany z naciśnięciem klawisza „enter” i odrzuceniem trybu bootstrap.

wmock
źródło
2

Ja też miałem ten problem i rozwiązałem go w ten sposób. Dodałem onsubmit to form. Chciałem również móc użyć klawisza enter jako klucza do zapisywania, więc dodałem javascript save_stuff () do onsubmit. return false; służy do zapobiegania przesłaniu formularza.

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

<script>
    function save_stuff(){
      //Saving stuff
    }
</script>
Firze
źródło