2009-06-11 12 views

risposta

3

Nota: questa risposta è vecchio e non può essere rilevante per le versioni più recenti là fuori ...


Non è certo aiuto a voi, ma l'ultimo poster in this filo ha scritto che la sua un bug del WebKit motore.
Non posso dire se un bug verificato o no ...

Ultimo messaggio da way back machine (come originale sembra non funzionare):

sto sviluppando la mia app in puro XHTML MP/Ecmascript MP/WCSS. Quindi, utilizzando l'API di controllo del browser della piattaforma nativa non è davvero un'opzione per me . Sì, il comportamento che dici è lo stesso del mio. Ho cercato il suo argomento nel bugzilla su webkit.org e ho scoperto che questo è davvero un bug segnalato da . focus() in una casella di testo evidenzia l'elemento ma non fornisce un carat in esso per l'utente che inizia a inserire il testo. L'utilizzo di un timer come indicato da "[email protected]" non aiuta neanche.

Questo comportamento è comune su piattaforme (s60, iphone, android) che utilizzano il motore del webkit.

Così come ora non vedo una soluzione a questo problema.

Spero che questo aiuti

+0

Il collegamento non funziona più, più la risposta non fornisce alcuna informazione di util. – eMarine

18

Vi mostrerà solo la tastiera se si spara attenzione da un evento click, in modo da mettere un pulsante sulla pagina con un onclick che fa la messa a fuoco e mostrerà la tastiera. Completamente inutile tranne che per la convalida (al clic del codice di convalida dell'invio si concentra su un elemento non valido)

+0

confermato. "clic" funziona. Per qualche motivo gli eventi gestuali non funzionano ... – RickDT

+0

cosa intendi? codice come questo? 'Button.click = function() { button.focus(); }; document.body.onload = function() { button.click(); }; 'ma non funziona. – CoderLim

2

Ho un problema simile, solo il mio problema è che lo stato attivo non si verificherà in un evento "touchend".

http://jsfiddle.net/milosdakic/FNVm5/

Il seguente codice funziona in Chrome/Safari, ecc, ma non riuscirà a Safari Mobile. L'unico modo per farlo funzionare è rendere l'evento su "clic", ma visto che il codice è stato creato per un dispositivo iOS, sarebbe utile che funzionasse con gli eventi touch.

Sembra un bug con il motore Webkit.

-4

Questa è una workround:

setTimeout(function(){ 
    input.focus(); 
},500);//milliseconds 
+3

Non ho potuto ottenere questa soluzione alternativa per lavorare su un iPad 2 con iOS 6.0.1. –

+0

Questo non può funzionare per quanto riguarda una politica di sicurezza Apple. –

5

Edit: Il seguente non funziona più su iOS - UIWebView ha permesso autofocus e schermata iniziale collegamenti utilizzati per messa a fuoco automatica, ma hanno disattivato che molte versioni fa.

Il autofocus (vedi sotto) di proprietà non funziona da un URL in Safari Mobile, ma funziona se sei:

  1. utilizzando un UIWebView
  2. utilizzando un collegamento schermata iniziale

Il carattere dell'ingresso deve essere abbastanza grande da evitare lo zoom iOS10 con doppio tocco (ora che la finestra è sempre zoomabile) e progettare la pagina da ridimensionare in modo che si adatti allo schermo (altrimenti sul caricamento della pagina si ottiene uno strano bug di timing/race in zoom, o se scroll in grado il campo a volte non si concentra correttamente sullo schermo).

autofocus: Le specifiche HTML5 per fare ciò sono autofocus property of the input tag. Ma iOS lo ignora, presumibilmente per un'interfaccia utente più pulita che non fa apparire la tastiera touch quando si naviga in una pagina. Here è una pagina che dimostra la proprietà dell'autofocus. Prima di HTML5 dovresti chiamare element.focus() nell'evento window.onload. Tuttavia, le chiamate a focus() non sono supportate su iOS tranne durante il gestore di un evento onclick.

+1

La tua risposta ha un eufemismo. WkWebView non rende l'autofocus sul campo di input (è collegato con motivi di sicurezza). –

0

Un po 'tardi forse, ma per la persona futura forse. Nella nostra webapp in esecuzione su iOS iPad (6 e più recente), lo facciamo con un determinato intervallo:

startFocusOnTextField: function() { 
     this.intervalIDForTextFieldFocus = window.setInterval(function() { 
      document.getElementById(page.textInputFieldObj.id).focus(); 
     }, 150); 
    }, 

che è chiamato a pagina carico (ambiente mobile jQuery)

+1

L'input del modulo riceve lo stato attivo (gli stili css sono applicati), ma la tastiera non si apre. – guiniveretoo

0

Se si imposta messa a fuoco con da un evento click, è necessario prevenire Default, altrimenti l'azione predefinita degli eventi clic imposterà l'elemento su cui si fa clic.

Problemi correlati