530 сообщений
#14 лет назад
При клике на ссылку должен появляться блок. Как сделать так, чтобы при клике в любое другое место кроме этого блока срабатывал эвент?
87 сообщений
#14 лет назад
И остановить распространение события, присвоив событию onclick появляющегося блока функцию возвращающую false. А то тогда и при клике по блоку будет срабатывать событие приписанное body
530 сообщений
#14 лет назад
Вот я не много запутался, потому что всегда пишу на фреймворке и он сам перебивает события.Вот есть 2 события:
document.body.addEventListener('click', function () { console.log('click on window')}, true)
options.selectedItem.addEventListener('click', function () { console.log('click on item')}, true);
Когда кликаю на итем то срабатывает 2 события, как перекрыть первое событие?
87 сообщений
#14 лет назад
Ну addEventListener не будет работать в ие, для ие привязывать обработчик надо через attachEvent. Погугли на эту тему, есть готовые решения в виде функций-регистраторов событий кроссбраузерных. А чтобы событие не всплывало, из второго обработчика возвратить return false(или вызвать event.stopPropagation() что кажется одно и то же). В модели DOM 3 события работают по следующему принципу - сначала с вершины дерева событие распространяется к элементу, который его вызвал. При этом любой из потомков может это событие перехватить, если ему назначен обработчик addEventListener с третьим параметром true. Потом событие выполняется объектом который его вызвал и начинает всплывать назад вверх по дереву, вызывая обработчики события этого типа, зарегистрированные у предков. Так вот как раз всплытие события останавливается вызовом метода stopPropagation() объекта event, передаваемого в обработчик. На счёт возврата false сейчас не помню, может это только во фреймворках работает.
530 сообщений
#14 лет назад
Цитата ("segoddnja"):попробуй из второго обработчика возвратить return false
Было бы все так просто, я сегодня весь день ломаю голову над этим делом.
87 сообщений
#14 лет назад
Глянь выше, я подкорректировал свой пост.
1807 сообщений
#14 лет назад
Делал примерно такую ерунду, но только на jQuery. Блок выпадает по клику на линк, но если ткнуть куда-то в пространство "вне" этого блока, то он закрывается. Может поможет.$('body').click( function() {
$('.enter').stop(true,true).slideUp(400);
$('.enter_link').removeClass('clicked');
});
$('.enter_link > a').click( function(e) {
e.stopImmediatePropagation();
$(this).parent().toggleClass('clicked');
$(this).parent().children('.enter').stop(true,true).slideToggle(400);
});
$('.enter').click( function(e) {
e.stopImmediatePropagation();
});