Added stopPropagation() when the touchEnd event is proxied to a click; without this, having a listener for both touchend and click still fires the touchend listener, causing duplicate events