Адключэнне Javascript падзей падзення прахадныя пры працы з г-ўпарадкаванай HTML элементамі

У мяне ёсць дурныя (і, спадзяюся, лёгка выправіць) праблемы, якія я зараз паспрабую апісаць.

The scenario-> I am trying to create a context menu using HTML/CSS/JS. Just a DIV with a high z-order that appears where a user right-clicks. Simple, and that portion works. The portion which does not is my attempt to make the menu disappear if the user clicks somewhere where a context menu is not supported; I am attempting to achieve this end with a general function in the BODY tag that fires onclick. Since the BODY tag is given a z-order of -1, and any other tags which might trigger the context menu to appear are given a higher z-order value, my hope was that if I right-clicked an element with a z-order of, say, 3, then it would fire the showMenu() function; instead, it appears that it does this, as well as passes the event to the underlying BODY tag, which causes the menu to become hidden again.

Як вы можаце сабе ўявіць, што гэта неверагодна складана. Хто-небудзь ведае, як зрабіць прадухіліць падзея ад перадаюцца ўніз? (Кнопка УВАХОД з'яўляецца тое, што вы можаце захацець зірнуць на, А анкера нешта падобнае, але не кадуюцца працаваць толькі пакуль).

Вось HTML-код:

http://pastebin.com/YeTxdHYq

А вось мой файл CSS:

http://pastebin.com/5hNjF99p

Гэта, як уяўляецца, праблема з IE, Firefox і Chrome.

0

1 адказы

Шмат падзей DOM «бурбалка» знізу ўверх праз аб'ект кантэйнерных аб'екты, што азначае, што яны ў рэшце рэшт дасягнуты цела. Але вы можаце спыніць гэта - паспрабуйце дадаць наступны код у апрацоўшчык пстрычкі на вашым элеменце:

e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();

... дзе е зменная ў вас ужо ёсць у вашай функцыі, якая прадстаўляе аб'ект падзеі.

event.stopPropagation(); should work in modern browsers, but the old IE way was event.cancelBubble = true; - to be safe you can just do both (but as shown above check that .stopPropagation is defined before trying to call it).

З даданнем вышэй код, калі вы націснеце на элеменце ваша функцыя будзе спыніць аб'екты кантэйнера (уключаючы цела) з бачачы пстрычка. Калі пстрыкнуць дзесьці ваша функцыя не выклікаецца так, то цела будзе апрацоўваць пстрычка.

Там больш інфармацыі аб гэтым у MDN і QuirksMode.org .

Заўвага: Я ігнараваў пытанне г-га парадку, таму што ў гэтым выпадку я думаю, што гэта не праблема - усё элементы з'яўляюцца нашчадкамі цела так (калі не спыніць) я б чакаць падзеі ў бурбалка цела незалежна ад г -порядок.

1
дададзена