event.stopPropagation(); не се държи според очакванията

Прочетох няколко статии, свързани с event.stopPropagation();, но нито едно от предоставените решения не работи за мен. По принцип това, което имам, е джаджа за акордеон с всички елементи, свити по подразбиране. На всеки заглавен елемент (dt таг) също има квадратче за отметка. Щракването върху квадратчето за отметка не трябва да задейства акордеона, за да разшири елементите си.

<dt data-toggle="collapse">
<span class="subscribe-checkbox"><button type="button" class="btn toggle-btn" data-toggle="button"></button></span>
</dt>
<dd>
<p>Accordion content...</p>
</dd>

Щракването върху обхвата (което трябва да действа като квадратче за отметка) трябва да добави отметнат клас към него. Но също така разширява елемента на акордеона (таг dd). Това, което правя в jQuery е:

$('.accordion-group .btn.toggle-btn').click(function (event) {
event.stopPropagation();
});

Въпреки че съдържанието на акордеона не се показва (което е добре), елементът <span> също не променя класа, така че не става „маркиран“. Опитах и ​​с .live() и също не се получи.


person Ciprian Amaritei    schedule 09.04.2012    source източник


Отговори (2)


Трябва да използвате addEventListener и след това да използвате булевия аргумент Capture, за да контролирате поведението на родителските елементи.

person Ralf    schedule 23.08.2012

stopPropagation() не работи, защото <dd> не е родител на <span>, така че събитието не се разпространява от <span> към <dd>.

Ще трябва малко да преструктурирате манипулаторите, може би да премахнете манипулатора за кликване за родителския елемент на целия този код и да добавите нов манипулатор за <dd>

person mihai    schedule 09.04.2012
comment
Благодаря за отговора. Така поведението е: - щракнете върху ‹dt› и ‹dd› се показва. - кликнете върху ‹span›, който е вътре в ‹dt›, span става отметнат и ‹dd› не се показва. Така че мисля, че проблемът е в ‹dt›, а не в ‹dd› и ‹p›. Тъй като събитието за щракване се разпространява върху ‹dt›, който е родител на span.. Има ли нещо, което пропускам? - person Ciprian Amaritei; 09.04.2012
comment
Мисля, че трябва да покажете повече код, какви други манипулатори на кликвания имате на място? - person mihai; 09.04.2012