Para que el teclado se muestre en dispositivos con iOS, debe centrarse en un elemento editable como input
o textarea
. Además, el elemento debe ser visible y la función .focus()
debe ejecutarse en respuesta a una interacción del usuario, como un clic del mouse.
Lo que pasa es que NO queremos que el elemento de entrada sea visible ... He jugueteado con esto por algún tiempo y finalmente obtuve el resultado que estaba buscando.
primer lugar, crear un elemento que desea utilizar para mostrar el teclado - en este caso, un botón, y un elemento de campo oculto: (Working jsFiddle o Test on a mobile device)
<button id="openKeyboard">Open Keyboard</button>
<input id="hiddenInput" style="visibility: hidden;">
A continuación, utilice el siguiente javascript:
document.getElementById('openKeyboard').addEventListener('click', function(){
var inputElement = document.getElementById('hiddenInput');
inputElement.style.visibility = 'visible'; // unhide the input
inputElement.focus(); // focus on it so keyboard pops
inputElement.style.visibility = 'hidden'; // hide it again
});
Notas:
- me he dado cuenta de que el iOS Safari Desplazarse y acercarse automáticamente al área de la entrada, así que asegúrese de utilizar la ventana correspondiente y coloque su elemento de entrada en una ubicación relevante.
- Puede usar algo de CSS en su entrada, como configurar
opacity
, height
y width
en 0
. Sin embargo, si su entrada está completamente oculta, esto no funcionará nuevamente, así que asegúrese de dejar el padding
o el border
solo para que haya algo que renderizar (aunque no se muestre debido a la opacidad). Esto también significa que no debe usar display:none
para ocultarlo, simplemente no se permite enfocar los elementos ocultos.
- Utilice los eventos normales del teclado (
keydown
, keypress
, keyup
) en su entrada oculta para acceder a la interacción del usuario como lo haría normalmente. Nada especial aquí.
¿No es posible utilizar JS para detectar si el usuario proviene de un iPad, y luego reemplazar su DIV editable con un área de texto? – Pwnna