iOS 7 Hover / Click-Problem - in einigen Fällen wurde kein Klick ausgelöst

8

Ich habe eine Art "Widget" - eine Datentabelle mit einigen umfangreichen Funktionen wie Sortieren, Zeilenauswahl und anderen.

In einigen Fällen (Platzierung / Verschachtelung von Widgets im DOM) werden Klicks auf die Zeilen in iOS 7 Safari nicht ausgelöst.

Widget verwendet jQuery 1.6.4

Ich kann keinen ganzen Widget-Code veröffentlichen (und das wird wirklich passieren;)), aber ich kann ein Reproduktionsszenario auf den folgenden Fall eingrenzen:

  1. Einfache HTML-Tabelle mit einigen Zeilen, zwei Spalten in jedem
  2. Die erste Spalte enthält ein "checkbox" - simple div , das normalerweise ausgeblendet ist und sichtbar wird, dann wird die übergeordnete Zeile verschoben. Die Sichtbarkeit wird nur mit CSS ausgelöst
  3. Jede Zeile hat einen click Event-Handler. Egal was es macht. In meinem Beispiel wird ein alert() ausgelöst
  4. Das übergeordnete Element der Tabelle ist ein Blockelement mit einer festen Höhe und overflow-y ist auf auto festgelegt.
  5. Die Tabelle ist größer als die übergeordnete Tabelle. Einige Tabelleninhalte sind daher ausgeblendet und können mit Bildlauf angezeigt werden

Hier ist ein jsFiddle: Ссылка

Auf jedem Desktop-Browser werden Elemente erfolgreich verschoben, ein Klick wird ausgelöst. Auf iOS7 funktioniert Hover, aber Klick wird NICHT ausgelöst.

HINWEIS : Unter iOS müssen Sie zweimal tippen, um click auszulösen. Der erste Klick löst hover aus und Sie werden ein "checkbox" sehen, dann muss der zweite tap ein click auslösen, aber nicht ...

Jede dieser Bedingungen ist erforderlich, um ein Problem zu reproduzieren. Entferne ein einzelnes und es fängt an zu arbeiten ...

Wenn Sie das Aussehen eines "Kontrollkästchens" entfernen, wird der Klick funktionieren ( Ссылка ).

Wenn Sie einen Höhenfix entfernen, funktioniert er ( Ссылка ).

Wenn Sie ein Überlaufscrolling entfernen, funktioniert es ( Ссылка ).

Jede Problemumgehung ist erforderlich, aber die Funktionalität sollte nicht geändert werden. Also, ich kann nicht "checkbox", Größe fix, Schweben, Klicken oder Überlauf Scrolling entfernen. Auch eine Änderung des HTML-Markups ist kaum möglich.

HINWEIS Ich habe eine Lösung - siehe meine Antwort unten. Aber ich brauche immer noch einen besseren Workaround, um CSS so matschig wie möglich zu halten.

HINZUFÜGEN : Ein Fehler wurde an Apple gesendet # 16072132

    
Olegas 14.02.2014, 18:01
quelle

5 Antworten

7

Versuchen Sie Folgendes:

%Vor%     
Denis 15.02.2014, 07:19
quelle
3

Um iOS dazu zu bringen, Hover-Zustände zu ignorieren, versuchen Sie Folgendes:

%Vor%

Sie können dies für jedes Element verwenden, damit es wie erwartet funktioniert.

    
daniel18387 14.10.2014 09:30
quelle
2

Plötzlich habe ich eine Lösung ... Mit JavaScript kann ich :hover selector entfernen, aber die Funktionalität beibehalten.

Wenn ich die Checkbox-Sichtbarkeit nicht durch CSS :hover , sondern durch die Klasse auslösen und über Javascript setzen werde, wird es funktionieren.

Ссылка

    
Olegas 14.02.2014 18:53
quelle
1

Meine aktuelle Arbeitslösung erfordert keine Änderungen in einer ganzen Codebasis und funktioniert in unseren Bedingungen gut.

  1. Mit MutationObserver , Monitorknoteneinfügung in head
  2. Wenn ein neuer Knoten eingefügt wird und dies ein link ist, überprüfen Sie document.styleSheets
  3. Für jedes Blatt überprüfen Sie die Regeln
  4. Wenn der Regel-Selektor (Zugriff von document.styleSheets[n].rules[i].selectorText ) :hover enthält, prüfen Sie Stile für diesen Selektor
  5. Wenn Styles display von none oder visibility von visible unterscheiden - dies ist ein "Show by Hover" -Stil
  6. Für jeden Stil ändern Sie den Selektor - ersetzen Sie :hover durch .hover und deklarieren Sie einen body Delegat für mouseenter und mouseleave Ereignisse, die .hover class auf dem ausgelösten Element
  7. umschalten

Vollständiger Quellcode hier: Ссылка

    
Olegas 21.02.2014 20:56
quelle
-2

.. versuchen Sie es mit:

%Vor%     
scooterlord 21.02.2014 00:49
quelle

Tags und Links