How can i close a vuetify's dialog opened without an activator, when the user press the ESC key on the keyboard?
Close dialog when ESC key is pressed
34.7k views Asked by Benno Eggnauer AtThere are 8 answers
On
What you want to use is a Key Modifier. You can use v-on:keyup.esc directive on your dialog to detect if the escape key is detected.
Read this for more information about Key Modifiers
On
While the solutions others have mentioned work, there still are conflicts with the bounce animation, making it not work after playing it by clicking outside the dialog, etc.
Setting the no-click-animation property also fixes the animation when closing as otherwise it plays both the close and bounce animation:
<v-dialog v-model="dialog" @keydown.esc="dialog=false" no-click-animation></v-dialog>
On
At version 3.4.9 of Feb 2024. If you have used the persistent attribute, according to this GitHub Bug Report This is still an issue. Some earlier Vuetify versions may work, others don't. I believe it is a bug.
On key event, it is not only bound to esc to close dialog. You may want ctrl+alt+O or shift+option+X to perform a special custom action of your own.
The safe workaround to handle it is to use mount and unmount event handler registration, and bypass the keyup.{keyname} event.
<script setup lang="ts">
import { onUnmounted } from "vue";
const keyFunc = (e: KeyboardEvent) => e.key === "Escape" && (dialog.value = false);
document.addEventListener("keydown", keyFunc);
onUnmounted(() => document.removeEventListener("keydown", keyFunc));
</script>
Add
@keydown.esc="dialog = false"tov-dialogcomponentWorking example: https://codepen.io/anon/pen/BJOOOQ
Additionally, if using dialog as custom component then possibly we need to emit input event: