diff --git a/assets/src/bundles/vault/vault-create-tasks.js b/assets/src/bundles/vault/vault-create-tasks.js
--- a/assets/src/bundles/vault/vault-create-tasks.js
+++ b/assets/src/bundles/vault/vault-create-tasks.js
@@ -1,5 +1,5 @@
 /**
- * Copyright (C) 2018-2019  The Software Heritage developers
+ * Copyright (C) 2018-2022  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
@@ -16,6 +16,13 @@
   'z-index': '100000'
 };
 
+function vaultModalHandleEnterKey(event) {
+  if (event.keyCode === 13) {
+    event.preventDefault();
+    $('.modal.show').last().find('button:contains("Ok")').trigger('click');
+  }
+}
+
 export async function vaultRequest(objectType, swhid) {
   let vaultUrl;
   if (objectType === 'directory') {
@@ -32,11 +39,15 @@
     // if last cooking has failed, remove previous task info from localStorage
     // in order to force the recooking of the object
     swh.vault.removeCookingTaskInfo([swhid]);
-    $(`#vault-cook-${objectType}-modal`).modal('show');
+    const vaultModalId = `#vault-cook-${objectType}-modal`;
+    $(vaultModalId).modal('show');
+    $('body').on('keyup', vaultModalId, vaultModalHandleEnterKey);
     // object has been cooked and should be in the vault cache,
     // it will be asked to cook it again if it is not
   } else if (data.status === 'done') {
-    $(`#vault-fetch-${objectType}-modal`).modal('show');
+    const vaultModalId = `#vault-fetch-${objectType}-modal`;
+    $(vaultModalId).modal('show');
+    $('body').on('keyup', vaultModalId, vaultModalHandleEnterKey);
   } else {
     const cookingServiceDownAlert =
           $(htmlAlert('danger',
@@ -82,7 +93,9 @@
       vaultCookingTasks.push(cookingTask);
       localStorage.setItem('swh-vault-cooking-tasks', JSON.stringify(vaultCookingTasks));
       $('#vault-cook-directory-modal').modal('hide');
+      $('body').off('keyup', '#vault-cook-directory-modal', vaultModalHandleEnterKey);
       $('#vault-cook-revision-modal').modal('hide');
+      $('body').off('keyup', '#vault-cook-revision-modal', vaultModalHandleEnterKey);
       const cookingTaskCreatedAlert =
           $(htmlAlert('success',
                       'Archive cooking request successfully submitted.<br/>' +
@@ -93,7 +106,9 @@
       $('body').append(cookingTaskCreatedAlert);
     } catch (_) {
       $('#vault-cook-directory-modal').modal('hide');
+      $('body').off('keyup', '#vault-cook-directory-modal', vaultModalHandleEnterKey);
       $('#vault-cook-revision-modal').modal('hide');
+      $('body').off('keyup', '#vault-cook-revision-modal', vaultModalHandleEnterKey);
       const cookingTaskFailedAlert =
           $(htmlAlert('danger',
                       'Archive cooking request submission failed.',
@@ -117,11 +132,13 @@
 
   } else {
     $('#invalid-email-modal').modal('show');
+    $('body').on('keyup', '#invalid-email-modal', vaultModalHandleEnterKey);
   }
 }
 
 export async function fetchDirectoryArchive(directorySwhid) {
   $('#vault-fetch-directory-modal').modal('hide');
+  $('body').off('keyup', '#vault-cook-revision-modal', vaultModalHandleEnterKey);
   const vaultUrl = Urls.api_1_vault_cook_flat(directorySwhid);
   const response = await fetch(vaultUrl);
   const data = await response.json();
@@ -140,11 +157,13 @@
     addVaultCookingTask('revision', cookingTask);
   } else {
     $('#invalid-email-modal').modal('show');
+    $('body').on('keyup', '#invalid-email-modal', vaultModalHandleEnterKey);
   }
 }
 
 export async function fetchRevisionArchive(revisionSwhid) {
-  $('#vault-fetch-directory-modal').modal('hide');
+  $('#vault-fetch-revision-modal').modal('hide');
+  $('body').off('keyup', '#vault-fetch-revision-modal', vaultModalHandleEnterKey);
   const vaultUrl = Urls.api_1_vault_cook_git_bare(revisionSwhid);
   const response = await fetch(vaultUrl);
   const data = await response.json();
diff --git a/assets/src/bundles/webapp/webapp-utils.js b/assets/src/bundles/webapp/webapp-utils.js
--- a/assets/src/bundles/webapp/webapp-utils.js
+++ b/assets/src/bundles/webapp/webapp-utils.js
@@ -1,5 +1,5 @@
 /**
- * Copyright (C) 2018-2021  The Software Heritage developers
+ * Copyright (C) 2018-2022  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
@@ -113,10 +113,12 @@
   let selectedCode = null;
 
   function getCodeOrPreEltUnderPointer(e) {
-    const elts = document.elementsFromPoint(e.clientX, e.clientY);
-    for (const elt of elts) {
-      if (elt.nodeName === 'CODE' || elt.nodeName === 'PRE') {
-        return elt;
+    if (e.clientX && e.clientY) {
+      const elts = document.elementsFromPoint(e.clientX, e.clientY);
+      for (const elt of elts) {
+        if (elt.nodeName === 'CODE' || elt.nodeName === 'PRE') {
+          return elt;
+        }
       }
     }
     return null;
diff --git a/cypress/integration/vault.spec.js b/cypress/integration/vault.spec.js
--- a/cypress/integration/vault.spec.js
+++ b/cypress/integration/vault.spec.js
@@ -1,5 +1,5 @@
 /**
- * Copyright (C) 2019-2021  The Software Heritage developers
+ * Copyright (C) 2019-2022  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
@@ -323,9 +323,8 @@
       const browseRevisionUrl = swhIdsContext.revision.swhid_url;
 
       // Create a vault cooking task through the GUI
-      cy.get('.modal-dialog')
-        .contains('button:visible', 'Ok')
-        .click();
+      cy.get('.modal.show')
+        .type('{enter}');
 
       cy.wait('@createVaultCookingTask');
 
diff --git a/swh/web/templates/includes/vault-create-tasks.html b/swh/web/templates/includes/vault-create-tasks.html
--- a/swh/web/templates/includes/vault-create-tasks.html
+++ b/swh/web/templates/includes/vault-create-tasks.html
@@ -1,5 +1,5 @@
 {% comment %}
-Copyright (C) 2017-2021  The Software Heritage developers
+Copyright (C) 2017-2022  The Software Heritage developers
 See the AUTHORS file at the top-level directory of this distribution
 License: GNU Affero General Public License version 3, or any later version
 See top-level LICENSE file for more information
@@ -159,8 +159,8 @@
     <div class="modal-dialog">
       <div class="modal-content">
         <div class="modal-header">
-          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
           <h4 class="modal-title" id="invalid-email-modal-label">Invalid Email !</h4>
+          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
         </div>
         <div class="modal-body">
           <p>The provided email is not well-formed.</p>