Я обыскал 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.
Позвольте мне отметить несколько вещей, связанных с делегированием событий:
Прежде всего, используйте функцию.on(), .delegate()
устарела.
Во-вторых, .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
})