e.preventdefault (); ne fonctionne pas

J’ai vraiment du mal à obtenir e.preventDefault(); travailler.

Voici mon code

 $('#ListSnapshot a').live('click', function(e){ var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; $('#ListSnapshot').load(url); e.preventDefault(); }); 

Quelqu’un pourrait-il expliquer ce que je fais de mal, je peux voir que la fonction de chargement fonctionne, mais ensuite la page redirige vers le lien cliqué que je dois empêcher.

J’ai également essayé de déplacer e.preventDefault(); au sumt de la fonction, en vain.

J’ai eu un problème similaire, dans lequel e.preventDefault() fonctionnerait sur certains cas, mais pas sur d’autres. Il n’a révélé aucune erreur et l’utilisation de try-catch n’affichait pas l’ catch alert . Ajouter e.stopImmediatePropagation() fait l’affaire, au cas où cela aiderait quelqu’un (grand merci à wcpro)

Je pense que vous pouvez avoir le scenerio suivant … au moins, cela reproduira l’erreur

vous pouvez avoir un événement plus haut configuré pour l’événement de survol, cet événement peut utiliser une liaison, et même si vous appelez e.preventdefault, il appelle toujours la liaison en premier. au lieu de lier. alors cela devrait fonctionner comme prévu. Vérifiez cet échantillon.

http://jsfiddle.net/rodmjay/mnkq3/

 $('div').bind ('click', function(){ // <-- switch this to live and you will see different behavior alert('div click'); }); $('a').live('click', function(e){ alert('a click'); e.stopImmediatePropagation(); }); 

Le code que vous avez fourni doit absolument fonctionner ( exemple de travail ). Il doit y avoir un autre problème avec votre code.

Essayez de placer une alerte dans votre gestionnaire d’événements pour vous assurer qu’il déclenche du tout . Il est possible que votre #ListSnapshot a ne trouve rien.

Si quelque chose ne va pas dans votre gestionnaire, cela provoque une exception, ce qui pourrait empêcher le javascript de s’exécuter complètement jusqu’à l’appel preventDefault . Je ne vois pas ce que cela pourrait être dans le code que vous avez fourni, cependant.

Je pense que la réponse de @David Hedlund est correcte, il doit y avoir une exception. Lorsque j’écris des gestionnaires d’événements, j’utilise un bloc try...catch pour m’assurer que l’action par défaut ne se produit pas. Essaye ça:

 $('#ListSnapshot a').live('click', function(e){ try { var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; $('#ListSnapshot').load(url); } catch(ex) { alert('An error occurred and I need to write some code to handle this!'); } e.preventDefault(); }); 

De cette façon, depuis e.preventDefault(); est en dehors du bloc try , même en cas d’erreur, e.preventDefault(); sera toujours appelé.

Avez-vous déjà essayé d’emballer le gestionnaire d’événements dans $ (document) .ready (…)? Juste une pensée.

Essayez de retourner false . live ne fonctionnera pas toujours de la même manière que bind . vérifier jquery docs .

e.preventDefault () doit être exécuté avant les autres lignes de code du gestionnaire.

 $('#ListSnapshot a').live('click', function(e){ e.preventDefault(); var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; $('#ListSnapshot').load(url); }); 

Vieille question, mais c’est le genre de moment où voir ce que firebug enregistre dans la console ou renvoie comme erreur. Quelque chose dans votre code empêche évidemment preventDefault () d’empêcher une redirection.