Contexte
Je me suis débattu avec ce petit problème stupide qui consiste à essayer d'annuler la direction du lien lorsque l'événement click est déclenché sur un élément d'ancrage dans l'application jQuery Mobile.
Disons que j'ai un document simple de plusieurs pages comme celui-ci :
<div data-role="page" id="page-1">
<div data-role="content">
<a href="#page-2" id="mLink">page 2</a>
</div><!-- /content -->
</div><!-- /page -->
<div data-role="page" id="page-2">
<div data-role="content">
</div><!-- /content -->
</div><!-- /page -->
... et JavaScript comme ceci :
(function (MyApp, $, undefined) {
'use strict';
// Initializes app
function init() {
$('#mLink').on('click', function (event) {
event.preventDefault();
//event.stopPropagation();
//event.stopImmediatePropagation();
});
}
// jQuery Mobile is ready now -> override defaults
$(document).on("mobileinit", function () {
// Set the default page transition
$.mobile.defaultPageTransition = 'slide';
});
// jQuery Mobile is ready now
$(document).ready(init);
}(window.MyApp = window.MyApp || {}, jQuery));
Problème
Je n'arrive pas à comprendre pourquoi event.preventDefault()
n'annule pas la transition de page. Cependant, si j'ajoute event.stopPropagation()
il l'annulera. De même, si je supprime la bibliothèque jQuery Mobile de l'application, celle-ci fonctionne sans event.stopPropagation()
.
Question
Ce comportement est-il normal et est-il correct de toujours les appeler tous les deux dans le gestionnaire pour annuler la direction du lien ?
Notas
J'utilise jQuery Mobile uniquement pour ses fonctions de modèle multipage, de navigation et de transition.
Question supplémentaire
La question qui se cachait derrière ma question initiale était en quelque sorte ce que fait jQuery Mobile à un lien qui intercepte la méthode event.preventDefault() pour pas empêcher l'action par défaut du lien, c'est-à-dire aller à la page cible ".