IOS show keyboard on input focus
None of the other answers worked for me. I ended up looking into the Nike javascript code and this is what I came up with as a reusable function:
function focusAndOpenKeyboard(el, timeout) { if(!timeout) { timeout = 100; } if(el) { // Align temp input element approximately where the input element is // so the cursor doesn't jump around var __tempEl__ = document.createElement('input'); __tempEl__.style.position = 'absolute'; __tempEl__.style.top = (el.offsetTop + 7) + 'px'; __tempEl__.style.left = el.offsetLeft + 'px'; __tempEl__.style.height = 0; __tempEl__.style.opacity = 0; // Put this temp element as a child of the page <body> and focus on it document.body.appendChild(__tempEl__); __tempEl__.focus(); // The keyboard is open. Now do a delayed focus on the target element setTimeout(function() { el.focus(); el.click(); // Remove the temp element document.body.removeChild(__tempEl__); }, timeout); }}// Usage examplevar myElement = document.getElementById('my-element');var modalFadeInDuration = 300;focusAndOpenKeyboard(myElement, modalFadeInDuration); // or without the second argument
Note that this is definitely a hacky solution, but the fact that Apple hasn't fixed this in so long justifies it.
I found a solution, click()
didn't work, but i figured it out.
searchMobileToggle.addEventListener('click', function() { if(mobileSearchblock.classList.contains('active')) { searchField.setAttribute('autofocus', 'autofocus'); searchField.focus(); } else { searchField.removeAttribute('autofocus'); } });
I was working with vue.js that was removing input autofocus
attribute, when the component was loaded.So i had it on click, but there was another problem, the autofocus only worked once, but combined with focus(), it now work all the time :)
Thanks for your help !
There is no legitimate way to do this since iOS kind of wants to only open the keyboard on a user interaction, however you can still achieve this with either using prompt()
or using focus()
from within a click()
event it and will show up.