Ich arbeite an einer mobilen Website, die auf einer Vielzahl von Geräten funktionieren muss. Die, die mir im Moment Kopfschmerzen bereiten, sind BlackBerry.
Wir müssen sowohl Tastaturklicks als auch Berührungsereignisse unterstützen.
Idealerweise würde ich nur verwenden:
$thing.click(function(){...})
Das Problem ist jedoch, dass einige dieser Blackberry-Geräte eine sehr ärgerliche Verzögerung vom Zeitpunkt der Berührung bis zum Auslösen eines Klicks aufweisen.
Das Mittel ist, stattdessen Touchstart zu verwenden:
$thing.bind('touchstart', function(event){...})
Aber wie gehe ich vor, um beide Ereignisse zu binden, aber nur eines auszulösen? Ich benötige das Klickereignis weiterhin für Tastaturgeräte, möchte aber natürlich nicht, dass das Klickereignis ausgelöst wird, wenn ich ein Touch-Gerät verwende.
Eine Bonusfrage: Gibt es überhaupt eine Möglichkeit, dies zu tun und zusätzlich Browser aufzunehmen, die nicht einmal ein Touchstart-Ereignis haben? Es sieht so aus, als ob BlackBerry OS5 Touchstart nicht unterstützt und sich daher auch auf Klickereignisse für diesen Browser verlassen muss.
NACHTRAG:
Vielleicht ist eine umfassendere Frage:
Ist es mit jQuery möglich / empfohlen, sowohl Berührungsinteraktionen als auch Mausinteraktionen mit denselben Bindungen zu behandeln?
Im Idealfall lautet die Antwort ja. Wenn nicht, habe ich einige Optionen:
1) Wir verwenden WURFL, um Geräteinformationen abzurufen und so unsere eigene Gerätematrix zu erstellen. Je nach Gerät verwenden wir Touchstart ODER Klicken.
2) Erkennen Sie die Touch-Unterstützung im Browser über JS (ich muss noch etwas darüber recherchieren, aber es scheint, dass dies machbar ist).
Damit bleibt jedoch noch ein Problem: Was ist mit Geräten, die BEIDE unterstützen? Einige der von uns unterstützten Telefone (nämlich Nokias und BlackBerries) verfügen sowohl über Touchscreens als auch über Tastaturen. Damit schließt sich der Kreis zurück zur ursprünglichen Frage ... gibt es eine Möglichkeit, beides irgendwie gleichzeitig zuzulassen?
.bind('touchstart mouseup')
wird es lösen (basierend auf einem der Kommentare unten)