2010-06-11 4 views
34

Lorsque j'utilise jQuery pour un simple événement click, il ne fonctionne que pour les liens. Est-il un moyen de le faire fonctionner pour des portées etc:Comment utiliser jQuery pour un événement click dans l'application Web iPhone

$("span.clicked").live("click", function(e){alert("span clicked!")}); 

$("a.clicked").live("click", function(e){alert("link clicked!")}); 

Le SPAN fonctionne dans Safari mais pas Safari Mobile (iPhone ou iPad) alors que la balise A fonctionne dans les deux.

Répondre

25

Vous devez écouter les événements "touchstart" et "touchend". Ajouter les auditeurs avec jQuery ...

$('span').bind("touchstart", function(e){alert('Span Clicked!')}); 

Vous voudrez peut-être écouter un touchstart et touchEnd afin que vous puissiez vérifier que l'élément ciblé lorsque le doigt touché est le même que l'élément ciblé lorsque le doigt a été retiré .

Je suis sûr qu'il ya probablement une meilleure façon de le faire, mais que devrait travail :)

Edit: Il y a une meilleure façon! Voir https://stackoverflow.com/a/4910962/16940

+0

Merci. Cela signifie-t-il que l'iPhone ignore les événements de clic sauf les liens (peut-être à cause des autres gestes possibles)? – Gazzer

+0

Il vous manque une parenthèse fermante. Devrait être $ ('span'). Bind ("touchstart", fonction (e) {alert ('Span Cliqué!')}); – mhenry1384

102

J'ai lutté avec cela aussi bien. Après avoir beaucoup joué et essayé de comprendre le problème, je suis tombé sur une solution simple.

Si vous définissez le cursor de l'élément sur pointer, il fonctionne de nouveau comme par magie avec le live et l'événement click de Jquery. Cela peut simplement être défini globalement dans le CSS.

+1

Vous avez recherché une solution comme celle-ci pendant des mois. Je suis venu avec la détection iphone/pod/pad et en changeant les événements de clic à d'autres événements juste pour ces appareils. Ceci est vraiment mieux. – danmayer

+6

notez que cela ne fonctionnera pas si vous faites 'cursor: pointer;' sur hover. – pseudosudo

+0

@pseudosudo pouvez-vous élaborer? il n'y a pas de survol sur un ipad - ou parlez-vous de ces versions de bureau de rupture à certains égards, ou «Samsung hover sur Galaxy S4»? –

18

Vous n'avez pas réellement besoin d'utiliser le touchstart ou un événement touchEnd, tant que l'étiquette 'span' (ou quoi que ce soit autre qu'un 'a' tag) possède une propriété css de:

cursor:pointer 

le clic va enregistrer

1

J'ai tout essayé et aucun des trucs n'a fonctionné. Il s'est avéré que je ne pouvais pas obtenir des événements de clic parce que j'avais un élément vidéo sous mon img. les éléments vidéo mangent apparemment des événements de clic.

+0

J'ai le même problème. La balise vidéo en dessous est le problème. Avez-vous résolu cela? –

+0

Je pense que j'ai fini par cacher (display: none) l'élément vidéo. Cela semblait être le seul moyen. – mhenry1384

2

Vous pouvez également amadouer le navigateur pour générer des événements de clic en ajoutant un attribut onclick vide. Pour une approche de ceinture et entretoises en cas ou l'autre approche ne fonctionne plus dans une mise à jour iOS donné, vous pouvez utiliser quelque chose comme ceci:

$("span.clicked").live("click", function(e){alert("span clicked!")}) 
       .attr('onclick','') 
       .css('cursor','pointer'); 

(en supposant que vous n'avez pas onclick réelle attributs que vous ne me dérange pas oblitérante)

1

Vous pouvez ajouter un vide onclick attribut, comme ceci:

<span onclick=''>Touch or Click Me</span> 
jQuery('span').live('click', function() { alert('foo'); }); 
Questions connexes