.not () с .live () не работает - PullRequest
       6

.not () с .live () не работает

1 голос
/ 03 сентября 2010
jQuery("a").not("div#mnuMain a").live("click", function(event){
                event.preventDefault();
                alert("yes I got u");                 
        });

Как заставить это работать?

Ответы [ 2 ]

6 голосов
/ 03 сентября 2010

Попробуйте поместить все это в главный селектор:

Пример: http://jsfiddle.net/8Tkex/

jQuery("a:not(div#mnuMain a)").live("click", function(event){
            event.preventDefault();
            alert("yes I got u");                 
    });

РЕДАКТИРОВАТЬ:

Причина использования .not() не сработала в том, что когда вы используете метод jQuery live(), вы фактически не размещаете обработчик щелчков на элементе.Вместо этого вы помещаете его в корень документа.

Это работает, потому что все щелчки (и другие) события на странице "всплывают" от элемента, который фактически получил событие, вплоть доroot, таким образом запуская обработчик, который вы поместили в корень, используя .live().

Поскольку это происходит для каждого клика на странице, jQuery должен знать , какой элемент получил щелчок, такон может определить, какой (если есть) обработчик запустить.Он делает это, используя selector, который вы использовали при вызове .live().

Так что если вы сделали:

jQuery("a").live("click", func...

... jQuery сравнивает селектор "a" с каждым click событие, которое получено.

Поэтому, когда вы делаете:

jQuery("a:not(div#mnuMain a)").live("click", func...

... тогда jQuery использует "a:not(div#mnuMain a)" для сравнения.

Но если вы делаете

jQuery("a").not("div#mnuMain a").live("click", func...

... селектор выглядит как "a.not(div#mnuMain a)", что не соответствует никому, поскольку в элементе <a> нет .not класса .

Я думаю, что некоторые методы могут работать с live(), но .not() не является одним из них.

Если вам когда-нибудь интересно узнать, как выглядит селектор для вашего объекта jQuery,сохраните ваш объект в переменную, войдите в консоль и загляните внутрь.Вы увидите свойство selector, которое использует jQuery.

var $elem = jQuery("a").not("div#mnuMain a");

console.log( $elem );

... должно выводить на консоль что-то вроде:

Object
     context: HTMLDocument
     length: 0
     prevObject: Object
     selector: "a.not(div#mnuMain a)"  // The selector that jQuery stored
     __proto__: Object

Это вывод, полученный от Safariконсоль.

0 голосов
/ 03 сентября 2010
jQuery("a:not(div#mnuMain a)").live("click", function(event){
            event.preventDefault();
            alert("yes I got u");                 
    });

попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...