Как я могу отменить все события кликов в документе HTML?Как отменить все события кликов в документе в JQuery
У меня есть Webapp, где может возникнуть ситуация, когда пользователь должен принять сообщение, прежде чем продолжать. Идея состоит в том, что сообщение появляется, и когда пользователь щелкает в другом месте, сообщение мигает или пытается привлечь внимание пользователя.
Это приложение предназначено для использования администрациями, использующими IE 8 и выше + современные браузеры, поэтому я надеялся на решение jquery.
На данный момент, я попробовал:
удалось раствор 1
$(document).bind('click', function(event){
event.stopImmediatePropagation();
$('.alertbox').effect('shake');
return false;
});
надеясь вернуть ложные или распространение стоп событие будет остановить щелчок, но я узнал, что событие пузыри вверх от Dom элемент в документ, поэтому элемент dom в любом случае запускает клик.
удалось раствор 2
Я нашел решение в чистом JS:
document.addEventListener('click', function(e) {
e.stopPropagation();
}, true);
используя верно в качестве третьего аргумента свяжут слушателя в фазе захвата и выполнять функции, прежде чем что-либо еще запускается на выполнение, но это не очень хорошо работает в IE.
удался раствором 3
Использования DIV, охватывающий весь документ, то это может быть решением для других людей, но не в этом точном сценарии, так как сообщение об ошибке (должно быть кликабельны) сидит в сложной структуре (все движется, и css сохраняет все на своем месте). Перемещение этого элемента поверх покрытия div, чтобы сделать его единственным доступным для решения решением, является хорошим решением, но не в этом случае.
Мне не обязательно нужно решение для получения события предварительного пузыря в IE (хотя это было бы хорошо). Если бы я мог найти трюк или обходной путь, я мог бы жить с ним. Есть идеи?
рабочим раствора 3
Я закончил с использованием неисправного раствора 3 и добавил поддельные хит зоны, представляющую границы в сообщении. Я не проверяю правильную границу, потому что сообщения всегда касаются правой стороны окна браузера.
$('#screencurtain').click(function(event)
{
event.stopImmediatePropagation();
if(event.clientX > $('#messages').offset().left && event.clientY > $('#messages').offset().top && event.clientY < $('#messages').offset().top + $('#messages').height())
{
$('#screencurtain').hide();
$('#messages').click();
}
else
{
$('.alertbox').effect('pulsate');
}
});
Поместите прозрачный элемент на весь документ. –
Но тогда как я могу обнаружить, что пользователь нажимает на сообщение? Нажатие на сообщение - вот что заставляет эту ситуацию решить проблему и снова использовать приложение. –
Поместите сообщение в элемент, который находится поверх прозрачного элемента. Хорошим примером этого является диалоговое окно jQuery UI, использующее «модальный: истинный». –