A nice feature that appears on some sites is the ability to have realtime search results. You have a search input that as you type the results update dynamically below without the need tho hit return/enter. However, if to achieve this the form's default behaviour to submit is disabled, on mobile and tablet the onscreen keyboard won't close on return. This can be confusing to the end-user.

To get round this we can listen for the return key being pressed and removing the focus on the input field using the blur event.

const hideMobileKeyboardOnReturn = (keyboardEvent) => {
    element.addEventListener('keyup', (keyboardEvent) => {
        if (keyboardEvent.code === 'Enter') {
            element.blur();
        }
    });
};

document.querySelementectorAll('[type=search]').forEach((element) => {
    hideMobileKeyboardOnReturn(element);
}); 

We're using the KeyboardEvent.code property here to identify the return/enter key. This property represents a physical key on the keyboard. Browser support for this property is fairly good; however, I've found there's still a need to include a fallback for the now deprecated KeyboardEvent.keyCode property to get this working on some mobile browsers.

key.keyCode === 13

To include a fallback we can update the hideMobileKeyboardOnReturn function to the following:

const hideMobileKeyboardOnReturn = (element) => {
    element.addEventListener('keyup', (keyboardEvent) => {
        const key = keyboardEvent.code || keyboardEvent.keyCode;
        if (key === 'Enter' || key === 13) {
            element.blur();
        }
    });
};

Here, if keyboardEvent.code is undefined (e.g. on older browsers), the code will fallback to use the keyboardEvent.keyCode property.

If you're wondering how to determine the values for the code and keyCode properties, I recommend checking out the JavaScript Keycode website.