How can I recognize touch events using jQuery in Safari for iPad? Is it possible?
If you're using jQuery 1.7+ it's even simpler than all these other answers.
$('#whatever').on({ 'touchstart' : function(){ /* do something... */ } });
Using touchstart or touchend alone is not a good solution, because if you scroll the page, the device detects it as touch or tap too. So, the best way to detect a tap and click event at the same time is to just detect the touch events which are not moving the screen (scrolling). So to do this, just add this code to your application:
$(document).on('touchstart', function() {
detectTap = true; // Detects all touch events
});
$(document).on('touchmove', function() {
detectTap = false; // Excludes the scroll events from touch events
});
$(document).on('click touchend', function(event) {
if (event.type == "click") detectTap = true; // Detects click events
if (detectTap){
// Here you can write the function or codes you want to execute on tap
}
});
I tested it and it works fine for me on iPad and iPhone. It detects tap and can distinguish tap and touch scroll easily.
Core jQuery doesn't have anything special for touch events, but you can easily build your own using the following events
- touchstart
- touchmove
- touchend
- touchcancel
For example, the touchmove
document.addEventListener('touchmove', function(e) {
e.preventDefault();
var touch = e.touches[0];
alert(touch.pageX + " - " + touch.pageY);
}, false);
This works in most WebKit based browsers (incl. Android).
Here is some good documentation.