Rendre un élément HTML focalisable par défaut non focalisable n'est pas possible sans JavaScript.
Après m'être plongé dans les événements DOM liés au focus, j'en suis arrivé à l'implémentation suivante (basée sur la méthode @ShortFuse's responder mais a corrigé certains problèmes et cas particuliers) :
// A focus event handler to prevent focusing an element it attached to
onFocus(event: FocusEvent): void {
event.preventDefault();
// Try to remove the focus from this element.
// This is important to always perform, since just focusing the previously focused element won't work in Edge/FF, if that element is unable to actually get the focus back (became invisible, etc.): the focus would stay on the current element in such a case
const currentTarget: any | null = event.currentTarget;
if (currentTarget !== null && isFunction(currentTarget.blur))
currentTarget.blur();
// Try to set focus back to the previous element
const relatedTarget: any | null = event.relatedTarget;
if (relatedTarget !== null && isFunction(relatedTarget.focus))
relatedTarget.focus();
}
// Not the best implementation, but works for the majority of the real-world cases
export function isFunction(value: any): value is Function {
return value instanceof Function;
}
Cette fonction est mise en œuvre en TypeScript, mais pourrait être facilement adaptée à du JavaScript ordinaire.