2014-06-06 6 views
3

Il s'agit d'une application JavaScript dynamique sur laquelle je travaille. J'ai beaucoup d'éléments d'ancrage <a> qui ont une classe. Lorsque cette classe est cliquée, quelque chose devrait arriver. Cela fonctionne très bien dans Firefox, Chrome, IE, mais dans certains cas l'événement de clic n'est pas déclenché sur mobile Safari (iPad et iPhone).Mobile Safari ne déclenche parfois pas l'événement click

Ces éléments ont tous exactement le même CSS, c'est juste leur position qui diffère (ils sont dans des conteneurs différents).

J'ai essayé différentes solutions que j'ai trouvées ici mais sans succès. Par exemple:

Avez-vous une autre idée qui pourrait me aider à trouver une solution à cela? Pourquoi l'événement click ne se déclenche que dans certains cas?

Merci!

+0

Vous devriez avoir un attribut href pour vous assurer que l'ancrage fonctionne correctement. Utilisez .preventDefault() dans js pour contrer son comportement. – Kyle

+0

Merci Kyle. Hrefs ajoutés mais pas de chance. Les autres éléments qui fonctionnent n'ont pas non plus d'hrefs. Comment exactement dois-je utiliser le .preventDefault()? – watt

+0

L'application utilise jQuery, donc il y a .preventDefault() dans sa fonction click. – watt

Répondre

3

Avez-vous essayé ceci? En effet, ios ne se déclenche pas l'événement click parfois, ne reconnaît l'événement tactile

$(document).on('touchstart click', [Selector], [ Event ] 
+1

Merci. On dirait que l'ajout de l'événement touchstart fonctionne.Cependant, ce n'est peut-être pas la meilleure solution car l'action est déclenchée même si l'utilisateur essaie simplement de faire défiler et commence à avoir le doigt sur ce lien. Y a-t-il un meilleur moyen que d'utiliser 'touchstart'? – watt

0

Il existe un événement supplémentaire pour les appareils mobiles. Essayez d'ajouter "onglet", pas seulement cliquer. Vous pouvez les combiner:

$(document).on('click tap', [selector], [handler]) 
+0

Merci, je suppose que vous vouliez dire 'tap'. J'ai essayé la plupart des événements sans résultat. – watt

+0

idiot moi, oui, je voulais dire robinet. – xanobius

+0

peut-être que cela aiderait à afficher la structure, donc on peut voir le DOM. Peut-être que l'événement est capturé ailleurs et n'a pas passé à travers – xanobius

4

L'événement click résultant d'un robinet sur iOS bulle comme prévu sous peu certaines conditions - dont vous avez parlé, le style du curseur. Voici un autre:

L'élément cible, ou l'un de ses ancêtres jusqu'à, mais non compris le <body>, a un gestionnaire d'événements explicite défini pour l'un des événements souris . Ce gestionnaire d'événements peut être une fonction vide.

http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html

Ceci est bien meilleur vecteur correctif, et peut se faire sans une vérification du navigateur. Vous ne devez ajouter un div supplémentaire en raison du « non compris le <body> » partie:

<body> 
    <div onclick="void(0);"> 
    <!-- ... all your normal body content ... --> 
    </div> 
</body> 

Maintenant, chaque événement click d'origine à l'intérieur de cette bulle div volonté comme prévu dans iOS (ce qui signifie que vous pouvez les attraper avec $(document).on('click', '.class', etc...)).

+0

Ceci devrait être la réponse acceptée. – jeffdill2

Questions connexes