Я сделал следующую структуру кода и выполняю addClass item_box_popup
и removeClass item_box
при нажатии item_box div
.
<div class="item_box"> <!--This is the small div which when clicked changes to the item_box_popup div-->
<div class="name">...</div>
<div class="detail">...</div>
</div>
<div class="item_box_popup"> <!--This div expands to show the detail and the children in it has a click event-->
<div class="name">...</div>
<div class="detail">...</div>
</div>
В item_box div
есть событие click, а не дочерние элементы. Работой является изменение div на item_box_pop div
на addClass
и removeClass
при нажатии.
У item_box_popup
нет события щелчка, но для детей определено событие щелчка. Мы использовали delegate
для определения события нажатия для .item_box_popup .name
и т. Д.
Проблема в том, что когда мы нажимаем item_box div
, также запускается событие click, определенное для .item_box_popup .name
. Это может произойти из-за изменения класса, определенного для клика .item_box
.
Я не хочу, чтобы событие click вызывало детей при нажатии .item_box
. Я попытался undelegate
прекратить запуск клика на дочерних элементах item_box и просто сделать класс изменений, определенный для него, но это не работает.
Событие клика для .item_box
$('.slide > div').bind('click',function(e) {
if(!$(this).hasClass('item_box_popup')){
var index=$('.slide > div').index(this);
$(this).removeClass('item_box');
$(this).addClass('item_box_popup');
Nomad.config.firstVisibleItem=index;<!--This is to set the position for .item_box_popup-->
}
});
Событие клика для .item_box_popup
$("body").delegate('.item_box_popup .name, .item_box_popup .detail','click', function(e){
//working code here for this
});
e.stopPropagation();
отключает обработчик щелчков по умолчанию .item_box