Всякий раз, когда происходит событие, оно «пузырится». Это означает, что он вызывается для фактического элемента, связанного с ним, но он также запускается один раз для каждого родительского элемента в цепочке вплоть до самого верха. Так что в вашем случае, когда вы нажимаете b
или c
, событие будет также вызываться для a
. Чтобы этого избежать, нужно прекратить пузыриться.
В частности, в ваших обработчиках событий для b и c вы должны остановить всплывающее событие, выполнив следующее:
if (event.stopPropagation) event.stopPropagation();
else event.cancelBubble = true;
Большинство браузеров поддерживают stopPropagation
в событии для прекращения всплытия. В старых версиях IE используется свойство cancelBubble
. Таким образом, вышеприведенное должно быть совместимо с браузерами
Я знаю, что вы не указали jQuery, но, поскольку он настолько популярен, стоит отметить, что если вы используете jQuery, это условие скрыто за рамками, поэтому вы можете просто сделать:
event.stopPropagation()