Aby klawiatura była wyświetlana na urządzeniach z systemem iOS, należy ustawić ostrość na edytowalnym elemencie, takim jak input
lub textarea
. Ponadto element musi być widoczny, aby funkcja była wykonywana w odpowiedzi na interakcję użytkownika, na przykład kliknięcie myszą.
Chodzi o to, że NIE chcemy, aby element wejściowy był widoczny. Miałem z tym trochę czasu, aby uzyskać spokój i ostatecznie osiągnąłem rezultat, którego szukałem.
Najpierw należy utworzyć element, który chcesz użyć, aby pokazać klawiaturę - w tym przypadku przycisk, a ukryty element input: (Working jsFiddle lub Test on a mobile device)
<button id="openKeyboard">Open Keyboard</button>
<input id="hiddenInput" style="visibility: hidden;">
następnie wykorzystać następujący skrypt:
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
});
Uwagi:
- zauważyłem, że iOS Safari automatycznie przewijaj i przybliżaj obszar wprowadzania danych, więc upewnij się, że korzystasz z odpowiedniego widoku i umieść element wejściowy w odpowiednim miejscu.
- Możesz użyć niektórych CSS na swoim wejściu, jak na przykład ustawienie
opacity
, height
i width
do 0
. Jeśli jednak twoje dane wejściowe są całkowicie ukryte, to nie będzie działać ponownie, więc upewnij się, że zostawisz urządzenie padding
lub border
tylko po to, aby coś było renderowane (nawet jeśli nie pojawi się z powodu nieprzezroczystości). Oznacza to również, że nie należy używać display:none
, aby go ukryć, ukryte elementy nie mogą być skupione.
- Użyj zwykłych zdarzeń klawiatury (
keydown
, keypress
, keyup
) na ukrytym wejściu, aby uzyskać dostęp do interakcji użytkownika, tak jak robisz to normalnie. Nic specjalnego tutaj.
Nie można użyć JS, aby wykryć, czy użytkownik pochodzi z iPada, a następnie zastąpić edytowalny DIV polem tekstowym? – Pwnna