Pracuję na mobilnej stronie internetowej, która musi działać na różnych urządzeniach. Ten, który sprawia mi teraz ból głowy, to BlackBerry.
Musimy obsługiwać zarówno kliknięcia klawiatury, jak i zdarzenia dotykowe.
Idealnie byłoby po prostu użyć:
$thing.click(function(){...})
ale mamy problem z tym, że niektóre z tych urządzeń BlackBerry mają bardzo irytujące opóźnienie od momentu dotknięcia do uruchomienia kliknięcia.
Środkiem zaradczym jest zamiast tego użycie touchstart:
$thing.bind('touchstart', function(event){...})
Ale jak mam powiązać oba zdarzenia, ale tylko jedno? Nadal potrzebuję zdarzenia kliknięcia na urządzeniach z klawiaturą, ale oczywiście nie chcę uruchamiać zdarzenia kliknięcia, jeśli korzystam z urządzenia dotykowego.
Dodatkowe pytanie: czy można to zrobić i dodatkowo pomieścić przeglądarki, które nawet nie mają zdarzenia TouchStart? Badając to, wygląda na to, że BlackBerry OS5 nie obsługuje TouchStart, więc będzie musiał polegać na zdarzeniach kliknięcia w tej przeglądarce.
UZUPEŁNIENIE:
Być może bardziej kompleksowym pytaniem jest:
Czy w jQuery jest możliwe / zalecane, aby obsługiwać zarówno interakcje dotykowe, jak i interakcje myszy za pomocą tych samych powiązań?
Idealnie odpowiedź brzmi: tak. Jeśli nie, mam kilka opcji:
1) Korzystamy z WURFL, aby uzyskać informacje o urządzeniu, aby stworzyć własną matrycę urządzeń. W zależności od urządzenia użyjemy funkcji touchstart LUB kliknięcia.
2) Wykryj obsługę dotykową w przeglądarce przez JS (muszę zrobić więcej badań na ten temat, ale wydaje się, że jest to wykonalne).
Pozostaje jednak jeden problem: co z urządzeniami, które obsługują ZARÓWNO. Niektóre telefony, które obsługujemy (a mianowicie Nokias i BlackBerries) mają zarówno ekrany dotykowe, jak i klawiatury. W ten sposób zataczam pełne koło z powrotem do pierwotnego pytania ... czy jest sposób, aby pozwolić na oba na raz?
.bind('touchstart mouseup')
rozwiąże to (na podstawie jednego z poniższych komentarzy)