2012-10-29 6 views
11

klicken Ich bin ein Problem auf iOS erlebt und ich habe eine Geige dafür setzen:kann nicht in HTML-Eingabefelder auf iOS zweimal eingeben

ist http://jsfiddle.net/Hk56Q/

Wenn ein Ereignis-Listener hinzugefügt auf das Dokument für jedes Berührungsereignis (Berührungsstart/Berührungsbewegungs/touchEnd), etwa so:

function onTouch(e){}; 
document.addEventListener('touchstart', onTouch, false); 

der auf iOS in den Eingabefeldern, die das folgende Verhalten ergibt:

  • First Touch: Fokus erhält der Eingang und der Benutzer kann (auf dem Feld bereits an Ort und Stelle mit Fokus) richtig in sie
  • Nachfolgende Berührungen geben: Eingabe funktioniert nicht mehr

Ich erlebe und testen dieses Problem auf iOS 5, 5.1 und 6, auf dem iPad und iPhone (Simulatoren und tatsächliche Geräte).

Die einzige fix scheint den Ereignis-Listener zu entfernen um das richtige Verhalten der Eingabefelder wieder herzustellen (oder eigentlich überhaupt nicht den Hörer hinzufügen):

document.removeEventListener('touchstart', onTouch); 

Ich habe auch bemerkt, dass, wenn es mehrere sind Iframes auf der Seite, und einer von ihnen fügt den Listener zu seinem Dokument, es bricht auch die anderen Felder des iframes.

Die Geige verhält sich korrekt auf meinem Android-Handy.

Irgendwelche Ideen, warum passiert das? Oder wie globale benutzerdefinierte Event-Handler für Touch-Ereignisse an Ort und Stelle, die die Eingaben auf iOS nicht brechen?

+1

Dieses Problem tritt bei FastClick auf und wird öffentlich verfolgt (https://github.com/ftlabs/fastclick/issues/51). Ich habe auch einen [Fehlerbericht] (http://openradar.appspot.com/radar?id=2527401) mit Apple eingereicht, der teilweise auf Ihrem Testfall basiert. –

+0

Hey, ja, es ist definitiv ein Safari iOS Bug, guter Job meldet es. Ich frage mich immer noch, wie dieses Problem so lange unbeachtet blieb. – BFil

+0

Ich habe diesen Fehler selbst bei der Größenänderung des Iframe-Fensters durch Vergrößern/Verkleinern festgestellt. –

Antwort

0

jQuery Mobile 1.2.0 sollte das sein, was Sie brauchen

BEWEISEN! Bevor Sie die Box:

PROVE(before)

Nach tickt die Box:

After ticking

9

Hier ist eine Abhilfe. Setzen Sie den Fokus auf das Fenster und dann wieder auf den Knoten, in einem Timeout:

function fixIpadTouch(node){ 
    node.ontouchend=function(e){ 
     if(document.activeElement===node){ 
      window.focus(); 
      setTimeout(function(){ 
       node.focus(); 
      },0); 
     } 
    } 
} 
+1

Ich kann nicht glauben, dass dies nicht mehr upvotes hat. Die einzige funktionierende Lösung für dieses Problem. Du bist ein Lebensretter :-) –

1

Eine Variation von Terry Antwort, um diese Mobilen Safari Fehlern gearbeitet (!!!) in meinem Fall. Hier ‚#input‘ und dieser Code ist auf der iframe-Seite:

var el = $('#input'); 
el.on('keydown', function() { 
    window.focus() 
    el.focus() 
}); 

Der Fehler löst in mehr Möglichkeiten, aber ‚keydown‘ kommt durch zuverlässig. Das bringt den nächsten "Tastendruck" auch dazu.

Verwandte Themen