Bonjour tout le monde,

j'essaye d'associer une combinaison de touches au clavier pour provoquer une action ( lien vers un mail et un site de jeu en ligne).
Mais pour savoir si mon code fonctionne il faut désactiver le comportement par défaut de ces combinaisons de touches.

Alors, j'ai essayé la méthode "event.preventDefault()" et "event.stopPropagation()" dans une fonction qui est en paramètre d'un addEventListener(), pour éviter ces comportements par défaut mais rien n'y fait.

(les classes .mailink et .gamelink sont reliés à des balises 'a' )

//Assign class to var
var mailLink = document.querySelector(".mailink")
var gameLink = document.querySelector(".gamelink")

//Delete the keyboard's defaults behaviors
document.addEventListener('keydown', (event) => {

    event.preventDefault()
    event.stopPropagation()
})

//function that allow the user to send a mail or go to an online game by pressing ctrl + K or ctrl + w
document.addEventListener('keydown', (event) => {
    if (event.ctrlKey && event.key === 'k') {
        return mailLink
    } else if (event.ctrlKey && event.key === 'w') {
        return gameLink
    }
})

Ce que je veux

Comme je l'ai dit plus haut, ça serait parfait si vous pouviez m'aider à régler ce problème de comportement par défaut.

Je vous ai aussi mis le bout de code qui est censé me permettre d'ajouter des actions à mes combinaisons de touches (CTRL + K et CTRL + W) au cas où si vous constater une erreur.

Merci pour votre aide.

2 réponses


Salut,

si j'ai bien compris tu veux simuler le click d'un lien ( mail visiblement d'après les noms ) avec les touches CTRL + K/₩.
Si c'est bien ça que tu souhaites faire, la dans ton 2eme listener la seul chose que tu fais est de retourner un élément HTML.

il faut que tu ajoute un eventListener sur tes elements HTML et que tu simule le click.

Salut,
Je te remerci pour ta réponse, j'avais totalement zappé qu'il fallait simuler le click pour le lien. Maintenant avec cette correction, je pense que la fonction peut fonctionner comme ça mais il y a toujours le comportement par défaut qui prévaut sur cette fonction, donc je ne peux pas voir si ça fonctionne.