In jQuery mobile, what's the diff between tap and vclick?
which event should i use to listen to ? why use vclick? and I just don't know which situation to use which.
Solution 1:
In case of jQuery Mobile Tap used to work only on mobile devices. This is not case any more.
VClick was created to bridge a gap between click/tap incompatibility among desktop/mobile devices.
Now days you case freely use tap but there are few problems. Tap will fail on iOS platform. Touchstart should be used instead.
Examples:
VClick
Will work both on desktop and mobile devices.
- Android 4.1.1 - No delay
- iOS - No delay
- Desktop Firefox 19 & Chrome 25.0.1364.152 - No delay
http://jsfiddle.net/Gajotres/PYPXu/embedded/result/
$(document).on('pagebeforeshow', '#index', function(){
$( document ).on( "vclick", '[data-role="page"]', function() {
$( this ).append( "<span style='color:#00F;'>vmouseup fired.</span>" );
});
});
Tap:
Tap
It used to work only on a mobile devices, now works also on a desktop browsers, but will fail on a iOS with a jQuery Mobile version 1.1 and below.
- Android 4.1.1 - No delay
- iOS - No delay
- Desktop Firefox 19 & Chrome 25.0.1364.152 - No delay
http://jsfiddle.net/Gajotres/k8kSA/
$(document).on('pagebeforeshow', '#index', function(){
$( document ).on( "tap", '[data-role="page"]', function() {
$( this ).append( "<span style='color:#00F;'>tap fired.</span>" );
});
});
Click
Will work on mobile devices and desktop browsers.
- Android 4.1.1 - Visible delay (300+ ms)
- iOS - No delay
- Desktop Firefox 19 & Chrome 25.0.1364.152 - No delay
http://jsfiddle.net/Gajotres/L2FHp/
$(document).on('pagebeforeshow', '#index', function(){
$( document ).on( "click", '[data-role="page"]', function() {
$( this ).append( "<span style='color:#00F;'>click fired.</span>" );
});
});
Conclusion
If you want a backward jQM compatibility stick with VClick, in any other case use Tap.
Solution 2:
vclick (virtualized click) simulates the onclick event.
http://api.jquerymobile.com/vclick/
Tap event triggers after a quick, complete touch event single target object.
http://api.jquerymobile.com/tap/
It depends what you are doing but unless you have a specific reason not to (e.g. supporting desktop and mobile with the same js) I would use tap.
More information here https://coderwall.com/p/bdxjzg
Solution 3:
I've just noticed a major difference between 'tap' and 'vclick'. 'vclick' fires if you tab to a button and press the enter key - 'tap' does not.