2010-12-16 3 views
4

Когда я нажимаю на x внутри закрывающего div, я хочу, чтобы фон изменился на белый.Почему я не могу нажать на этот div?

Это разметка:

<div class="list-item list-item-active"> 
    <div class="close">x</div> 
</div> 

Это JavaScript:

$(document).ready(function(){ 
    $('.list-item').live('click', function() { 
     if (!$(this).hasClass('list-item-active')) 
      $(this).addClass('list-item-active'); 
    }); 
    $('.list-item .close').live('click', function() { 
     $(this).parent().removeClass('list-item-active'); 
    }); 
}); 

Это CSS:

.list-item {width:100px;height:100px;background:#fff} 
.list-item-active {background:#ccc} 

Демо: http://jsfiddle.net/JMeff/

+3

Пожалуйста, убедитесь, что ваш вопрос имеет смысл сам по себе. jsFiddle, как и любой сайт, может иметь свои сбои. – 2010-12-16 16:37:52

+1

Я бы вставлял ваш код прямо на этот сайт, а затем предлагал ссылку jsFiddle в качестве резервной копии (что, кстати, имеет пример, BTW). – JasCav 2010-12-16 16:39:26

+0

, когда я добавляю событие click на элемент i can not add click event на элементах внутри этого элемента – Vytautas 2010-12-16 16:39:49

ответ

10

Вы может щелкнуть по нему, но щелчок также вызывает щелчок родителя из-за барботирования события по умолчанию. Для того, чтобы получить эффект, который вы хотите, остановить пузырь через .stopPropagation(), как это:

$('.list-item .close').live('click', function(e) { 
    $(this).parent().removeClass('list-item-active'); 
    e.stopPropagation(); 
}); 

You can test it out here.

3

Попробуйте этот один:

$(document).ready(function(){ 
    $('.list-item').live('click', function() { 
     if (!$(this).hasClass('list-item-active')) 
      $(this).addClass('list-item-active'); 
    }); 
    $('.list-item .close').live('click', function() { 
     $(this).parent().removeClass('list-item-active'); 
     return false; 
    }); 
}); 

Обратите внимание на новый return false: в противном случае событие будет пойман $('.list-item').live вместо того, вы хотите, в $('.list-item .close').live.

0

Потому что вы не вернули false во втором обработчике событий. Без return false; событие будет обработано также родителем, которое читает класс после его удаления.

Смежные вопросы