Estou trabalhando em um site móvel que precisa funcionar em uma variedade de dispositivos. Os que estão me dando dor de cabeça no momento são BlackBerry.
Precisamos oferecer suporte a cliques no teclado e a eventos de toque.
Idealmente, eu apenas usaria:
$thing.click(function(){...})
mas o problema que estamos enfrentando é que alguns desses dispositivos blackberry têm um atraso muito irritante desde o momento do toque até o acionamento de um clique.
O remédio é usar o touchstart:
$thing.bind('touchstart', function(event){...})
Mas como faço para vincular os dois eventos, mas apenas disparar um? Ainda preciso do evento de clique para dispositivos de teclado, mas é claro que não quero que o evento de clique seja acionado se estiver usando um dispositivo de toque.
Uma pergunta bônus: existe alguma maneira de fazer isso e acomodar adicionalmente navegadores que nem sequer têm um evento de toque inicial? Ao pesquisar isso, parece que o BlackBerry OS5 não oferece suporte ao touchstart e também precisará contar com os eventos de clique desse navegador.
TERMO ADITIVO:
Talvez uma pergunta mais abrangente seja:
Com o jQuery, é possível / recomendado lidar com as interações de toque e de mouse com as mesmas ligações?
Idealmente, a resposta é sim. Caso contrário, tenho algumas opções:
1) Usamos o WURFL para obter informações sobre o dispositivo, para criar nossa própria matriz de dispositivos. Dependendo do dispositivo, usaremos o touchstart OU clique.
2) Detectar para suporte por toque no navegador via JS (preciso fazer mais pesquisas sobre isso, mas parece que isso é possível).
No entanto, isso ainda deixa um problema: e os dispositivos que suportam AMBOS. Alguns dos telefones suportados (nomeadamente o Nokias e BlackBerries) têm ecrãs tácteis e teclados. Então isso me leva de volta à pergunta original ... existe uma maneira de permitir as duas coisas de uma vez?
.bind('touchstart mouseup')
o resolverá (com base em um dos comentários abaixo)