Ich habe ohne Ergebnis nach einer Lösung gesucht, ich weiß, dass dies eine häufig ungelöste Frage ist, aber ich verstehe NIKE (https://m.nike.com/fr/fr_fr/) und NAHRUNGSQUELLE (https://www.foodspring.fr/) macht es auf dem Handy.
Da frage ich mich, wie machen die das?
würde das helfen?
– Roy J
29. Januar 2019 um 15:49 Uhr
Fokus ist, wenn Sie das Element wegklicken. Möchten Sie stattdessen die Onclick-Funktion?
– Chillen
29. Januar 2019 um 15:51 Uhr
n8jadams
Keine der anderen Antworten hat bei mir funktioniert. Am Ende habe ich mir den Javascript-Code von Nike angesehen und das ist, was ich als wiederverwendbare Funktion gefunden habe:
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 example
var myElement = document.getElementById('my-element');
var modalFadeInDuration = 300;
focusAndOpenKeyboard(myElement, modalFadeInDuration); // or without the second argument
Beachten Sie, dass dies definitiv eine Hacky-Lösung ist, aber die Tatsache, dass Apple dies so lange nicht behoben hat, rechtfertigt dies.
@n8jadams können wir dies tun, ohne auf die Schaltfläche „Modal anzeigen“ zu klicken?
– Deepak
1. April 2020 um 9:44 Uhr
@ Deepak natürlich. Diese Code-Sandbox verwendet nur einen Onclick-Callback, der diese Funktion aufruft. Wann immer Sie möchten, dass das alles passiert, (mit oder ohne Klick) rufen Sie die an focusAndOpenKeyboard Funktion.
– n8jadams
1. April 2020 um 16:53 Uhr
Dieser Hack wurde erfolgreich unter iOS 13.3 mit React und MUI verwendet. Danke, @n8jadams!
– kenecaswell
10. Juni 2020 um 17:22 Uhr
@n8jadams, wenn Sie aus irgendeinem Grund nicht an dasselbe Element anhängen können, können Sie es an body anhängen und verwenden getBoundingClientRect().top die vom Ansichtsfenster aus gemessen wird. Der Speicherort ist wahrscheinlich genau für Sie, aber wenn Sie das CSS hinzufügen würden position: relative zu jedem Vorfahren dazwischen el und body die messung könnte weit weg sein. Es mag Ihnen egal sein, aber in meinem Fall war es wichtig, also wollte ich diesen Vorbehalt für andere an einer ähnlichen Stelle wie mir haben. developer.mozilla.org/en-US/docs/Web/API/Element/…
– Tylertrotter
17. Februar 2021 um 13:11 Uhr
Ich habe eine Lösung gefunden, click() hat nicht funktioniert, aber ich habe es herausgefunden.
Ich habe mit vue.js gearbeitet, das Eingaben entfernt hat autofocus -Attribut, wenn die Komponente geladen wurde. Also hatte ich es auf Klick, aber es gab ein anderes Problem, der Autofokus funktionierte nur einmal, aber in Kombination mit focus () funktioniert es jetzt die ganze Zeit 🙂
Danke für Ihre Hilfe !
Funktioniert bei mir nicht … ich habe es sogar mit dem Auslösen eines Klickereignisses kombiniert, nachdem ich den Fokus gesetzt habe, funktioniert immer noch nicht :/ Testen auf Iphone11 iOS, v13 Safari
– Paschata
15. Oktober 2020 um 11:01 Uhr
Adam Kai
Das macht mich/uns wirklich verrückt. Auf dem Android-Handy funktioniert es einwandfrei, aber der Apple-Entwickler hat etwas deaktiviert. (Ich verstehe, dass es ärgerlich ist, die Tastatur zu öffnen, wenn dies nicht erforderlich ist).
Ich habe zufällig herausgefunden, dass das “Popup”-Modul von Semantic-UI dies auf magische Weise behebt.
Beachten Sie, dass die Lösung für SemanticUI funktioniert (@semantic-ui Team kann sagen, welches Ereignis diese Arbeit macht)
Wie Sie sehen, habe ich das Trigger-Icon mit dem Popup-Modul umschlossen und den Popup-Inhalt ausgeblendet, indem ich den verrückten Offset gesetzt habe. Und dann funktioniert es auf magische Weise.
Beim Klicken auf die Schaltfläche müssen wir eine temporäre Eingabe erstellen, an einen vorhandenen Container (in der Nähe unserer Eingabe) anhängen und uns darauf konzentrieren.
btnClicked() {
this.showModal = true;
this.searchBar = this.renderer2.selectRootElement('#searchBar', true);
// 2nd argument preserves existing content
// setting helper field and focusing on it
this.inputHelper = this.renderer2.createElement('input');
this.renderer2.appendChild(this.searchBar, this.inputHelper);
this.inputHelper.focus();
let event = new KeyboardEvent('touchstart',{'bubbles':true});
this.searchBarButton.nativeElement.dispatchEvent(event);
}
Nachdem die Modal-/Zieleingabe angezeigt wird, verschieben wir den Fokus und entfernen den temporären:
Es gibt kein legitim Möglichkeit, dies zu tun, da iOS die Tastatur nur bei einer Benutzerinteraktion öffnen möchte, aber Sie können dies immer noch mit beiden erreichen prompt() oder verwenden focus() von innen a click() Event it und wird auftauchen.
“Innerhalb eines click()-Ereignisses”, Sie sagen also im Grunde, dass Sie das Timeout entfernen sollen, oder? Denn Autor ist bereits im Click-Event
– Gena Moros
29. Januar 2019 um 16:11 Uhr
Nein, das kannst du behalten. Lösen Sie im Wesentlichen ein Klickereignis in das Eingabefeld aus, nachdem Sie es fokussiert haben.
– öl
29. Januar 2019 um 16:18 Uhr
“Innerhalb eines click()-Ereignisses”, Sie sagen also im Grunde, dass Sie das Timeout entfernen sollen, oder? Denn Autor ist bereits im Click-Event
– Gena Moros
29. Januar 2019 um 16:11 Uhr
Nein, das kannst du behalten. Lösen Sie im Wesentlichen ein Klickereignis in das Eingabefeld aus, nachdem Sie es fokussiert haben.
– öl
29. Januar 2019 um 16:18 Uhr
10171400cookie-checkIOS Tastatur bei Eingabefokus anzeigenyes
würde das helfen?
– Roy J
29. Januar 2019 um 15:49 Uhr
Fokus ist, wenn Sie das Element wegklicken. Möchten Sie stattdessen die Onclick-Funktion?
– Chillen
29. Januar 2019 um 15:51 Uhr