jQuery("a").not("div#mnuMain a").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
Comment le faire fonctionner?.not() avec .live() ne fonctionne pas
jQuery("a").not("div#mnuMain a").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
Comment le faire fonctionner?.not() avec .live() ne fonctionne pas
Essayez de mettre tout dans le sélecteur principal:
Exemple:http://jsfiddle.net/8Tkex/
jQuery("a:not(div#mnuMain a)").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
EDIT:
La raison en utilisant .not()
ne fonctionnait pas est que lorsque vous utilisez live()
m de jQuery ethod, vous ne placez pas le gestionnaire de clic sur l'élément. Au lieu de cela, vous le placez à la racine du document.
Cela fonctionne parce que tous les clics (et autres) événements sur la page "remontent" de l'élément qui a réellement reçu l'événement, jusqu'à la racine, tirant ainsi le gestionnaire que vous avez placé à la racine en utilisant .live()
. Parce que cela se produit pour chaque clic sur la page, jQuery doit savoir lequel élément a reçu le clic afin qu'il puisse déterminer le gestionnaire (le cas échéant) à déclencher. Il le fait en utilisant le selector
que vous avez utilisé lorsque vous avez appelé .live()
.
Donc, si vous avez:
jQuery("a").live("click", func...
... jQuery compare le sélecteur "a"
à chaque événement click
qui est reçu.
Alors quand vous faites:
jQuery("a:not(div#mnuMain a)").live("click", func...
... alors jQuery utilise "a:not(div#mnuMain a)"
pour la comparaison.
Mais si vous
jQuery("a").not("div#mnuMain a").live("click", func...
... le sélecteur finit par ressembler à "a.not(div#mnuMain a)"
, qui ne correspondre à quelque chose, car il n'y a pas .not
classe sur l'élément <a>
.
Je pense que certaines méthodes peuvent fonctionner avec live()
, mais .not()
n'en fait pas partie.
Si vous êtes curieux de savoir à quoi ressemble le sélecteur pour votre objet jQuery, enregistrez votre objet dans une variable, connectez-le à la console et regardez à l'intérieur. Vous verrez la propriété selector
utilisée par jQuery.
var $elem = jQuery("a").not("div#mnuMain a");
console.log($elem);
... devrait afficher à la console quelque chose comme:
Object
context: HTMLDocument
length: 0
prevObject: Object
selector: "a.not(div#mnuMain a)" // The selector that jQuery stored
__proto__: Object
Ceci est la sortie que je reçois de la console de Safari.
jQuery("a:not(div#mnuMain a)").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
essayer
Bonjour .... Pouvez-vous s'il vous plaît me dire pourquoi il ne fonctionnait pas? –
@cloudlight - Bien sûr. Je l'afficherai dans ma réponse dans quelques minutes. : o) – user113716
merci beaucoup patrik dw pour une si belle explication. –