Дьявол времени с делегатом jQuery и .not

0

Я обыскал hi и low, но не смог найти решение. Я пробовал все, но не могу заставить эту работу работать.

ПРИМЕЧАНИЕ. Невозможно использовать ".on()". Использование более старой версии jQuery, которая поддерживает только.live/.delegate

в основном, у меня очень интересная веб-страница.. и есть обработчики событий, которые летают повсюду. НО, я в основном хочу присоединить событие click на теле, но исключаю определенные идентификаторы. Отлично. Понял, что это будет легко.

пытался:

 jQuery('body').delegate('.not("#mainID #anotherID")','click', function(e){ 
    // do something
 })

 jQuery('body').delegate(':not(".class1 .class2")','click', function(e){ 
    // do something
 })

и т.д...

и пучок еще больше.. в принципе, не может заставить эту работу работать. Независимо от того, что я делаю, вся страница кликабельна.

когда я делаю что-то простое: отлично работает.

 jQuery('body').delegate('#someID','click', function(e){ 
    // do something
 })

Но это не то, что мне нужно. Мне нужно в принципе разрешить щелчок по всему телу, за исключением двух подмножеств, меньших частей страницы. Я подумал, что это будет тривиально. Но по какой-то причине просто не работает.

Два элемента, которые я хочу исключить, следующие: id: mainID w/класс ".class1" id: anotherID с классом ".class2"

другое примечание: mainID находится за пределами другого идентификатора - два отдельных раздела страницы. Оба divs.

Теги:

1 ответ

2
Лучший ответ

Позвольте мне отметить несколько вещей, связанных с делегированием событий:

  1. Прежде всего, используйте функцию.on(), .delegate() устарела.

  2. Во-вторых, .class1.class2 будет соответствовать class2 который находится внутри класса class1

    jQuery('body').on('click', ':not(.class1, .class2)', function(e) { 
        // do something
    })
    

Но это тоже не то, что вам нужно, вам нужно:

$(".class1, .class2").on('click', function() { return false; });

Если вы используете более старые версии jQuery и по какой-то причине не можете его изменить, используйте .live() или обычный .click() обработчик:

$(".class1, .class2").click(function() { return false; });

Теперь, если вы нажмете на .class1 и .class2 ничего не произойдет. Если вы хотите выбрать только определенный class в id, вы можете использовать #mainID.class1 как селектор. Или с более старой делегацией событий:

jQuery('body').delegate(':not(.class1, .class2)','click', function(e){ 
    // do something
    // but this will execute on every where you click except .class1, .class2
})
  • 0
    Позвольте мне обновить мой OP - не могу использовать .on - используя более старый jQuery.
  • 0
    Остальная часть ответа все еще должна применяться, хотя.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню