Reputation: 421
This is an HTML / CSS / JS (jQuery) iPad app. I've got a button, that slides down an input form. I'd like to focus the user on the input, and then launch the keyboard.
This is what I'm working with, but doesn't work:
$('#myFormField').focus();
This does indeed focus the input, but fails to launch the keyboard. Is it just not possible (for security reasons or whatever)?
Is there a way to force or simulate a user tapping the input (or anything for that matter)?
Upvotes: 38
Views: 37781
Reputation: 405
Tested on Safari iPhone 7 & iPhone 6 Plus, Android 4.4
and it opened iOS virtual keyboard successfully when I touched the button.
1) make a Button to trigger keypress event => $('.btn_abc')
2) make a text input tag, and set the ID to this element => $('#search_input')
$( document ).ready(function() {
var focusTextField = function(){
console.log("focusElement");
};
var onKeypressHandler = function(){
console.log("* * * keypress event handler")
$('#search_input').blur().focus();
};
var onClickHandler = function() {
$('.btn_abc').trigger('keypress');
};
$('#search_input').bind('focus', focusTextField);
$('.btn_abc').bind('click', onClickHandler);
$('.btn_abc').bind('keypress', onKeypressHandler);
});
Upvotes: 4
Reputation: 21
Turn that button into an input field then instantly swap focus to the main input field. They keyboard will open and stay opened. Below is an example using a button like you asked, placing a transparent input field over the button the user clicks. Tested on an iPhone 4 (iOS 6/7) and an HTC Windows phone.
The input you want the user to focus on:
<input id="main" />
The button the user presses (with input field overlayed using css):
<a>Button</a><input onfocus="FocusMain()" />
Swap focus instantly:
function FocusMain()
{
$("#main").focus();
}
Upvotes: 2
Reputation: 931
Try:
$('#element').blur().focus();
or if that does not work:
$('#element').focus().blur().focus();
blur() eliminates the focus and focus() brings it back. For some reason, it works every time compared to focus() working once in a while on its own.
Upvotes: -2
Reputation: 697
This should do what you want:
$("#element").focus().click();
Upvotes: -2