Comment puis-je faire disparaître deux fois les événements de déclenchement?

  • J'ai une application à une seule page.
  • Il utilise backbone.js.
  • Cliquez sur les événements via le déclencheur de la souris une fois.
  • Cliquez deux fois sur les événements via le déclencheur tactile deux fois.
  • Unbinding l'événement d'un clic arrête les deux sur les appareils tactiles.

Je ne peux pas comprendre où commencer à regarder.

C'est le JS:

$('.classy').on('click', 'button', function(){ console.log('clicked'); }) 

J'ai besoin d'aide pour savoir comment résoudre ce problème. Je sais que je n'ai pas donné suffisamment d'informations pour recevoir une véritable réponse. La partie confuse pour moi est que cela ne se pose que sur les appareils tactiles. Si je liaisons accidentellement deux événements ou créais deux instances de la même vue, cela n'arriverait-il pas aussi aux clics de souris?

Je vous remercie.

EDIT: J'ai essayé d'utiliser l'événement de prise via jQuery Mobile. Cela a eu une réaction étrange. Il déclencherait l'événement une fois et ressemblait à ce qu'il était fait, mais la prochaine fois que vous touchez n'importe où sur l'écran, il déclencherait l'événement à nouveau. … étrange, des idées?

J'ai finalement trouvé le problème. Il venait de iScrolls en couches. J'ai dû pirater la lib à ce stade, probablement une façon beaucoup mieux de résoudre ce problème, mais illustre le point.

 if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA' && window.iScrollClickFIX != true) { window.iScrollClickFIX = true; setTimeout(function(){ window.iScrollClickFIX = false; }, 1) 

Merci à tous pour l'aide.

Ce n'est peut-être pas la solution réelle … Juste donner une pensée

 $('.classy').die('click').on('click', 'button', function(){ console.log('clicked'); }) 

Essayez de changer votre liaison à mousedown au lieu de click ?

(En supposant que vous utilisez un click )

Peut-être existe-t-il un autre élément parent que vous avez également assigné un gestionnaire de clics. Essayez ceci, pour éviter que le clic (ou tout autre événement) n'éclate le DOM:

 $('.classy').on('click', 'button', function(e){ console.log('clicked'); e.stopPropagation(); }) 

La première chose que je ferais pour résoudre les problèmes de prise de vue est un point de rupture utilisant le débogueur dans Chrome / IE / Firefox pour vous assurer que la liaison ne se produit pas deux fois.

Ou essayez ceci:

 $('.classy').off('click').on('click', 'button', function(){ console.log('clicked'); }) 

Vous pouvez utiliser la seule fonction de jquery au lieu de cliquer pour vous débarrasser des problèmes de double-clic.