2012-06-15 5 views
0

Я пытаюсь создать кнопку Hide/Show с помощью jQuery. Когда кликнуто .cminus, ему нужно скрыть .arrowwrap и .commentbody и заменить его собственный класс на cplus. Затем, если нужно щелкнуть .cplus напротив, должно произойти.Событие JQuery для замещенного класса

Задача 1: В примере ниже после замены .cminus на .cplus, .cplus не запускает событие клика при его нажатии.

(EDIT проблема 2 вынесена в отдельный билет) Проблема 2: Я не доходя до .commentbody право скрыть/показать

Html:

<div class="commentline"> 
    <div class="carrowholder"> 
     <div class="cminus"></div> 
     <div class="arrowwrap"> 
     </div> 
    </div> 
    <div class="commentholder"> 
     <div class="commenttitle"> 
      Title 
     </div> 
     <div class="commentbody"> 
      Body 
     </div> 
    </div> 
</div> 

Jquery код:

$('.cminus').click(function(e) { 
    $(this).next('.arrowwrap').hide(); 
    $(this).parent().next('.commentholder .commentbody').hide(); 
    $(this).removeClass('cminus'); 
    $(this).addClass('cplus'); 
}) 

$('.cplus').click(function(e) { 
    alert("clicked cplus"); 
    $(this).next('.arrowwrap').show(); 
    $(this).addClass('cminus'); 
    $(this).removeClass('cplus'); 
}) 

ответ

2

Используйте .toggleClass('cminus'); и т. Д., А затем у вас есть один обработчик событий или используйте .on/.live на родительском элементе, чтобы разрешить делегированные события.

Что касается

$(this).parent().next('.commentholder .commentbody').hide(); 

Я думаю, что .commentholder является излишним, как вы указываете следующий который получает следующий родственный.

+0

Относительно проблемы 1. Не заменяют ли классы? Можете ли вы расширить свое решение? И удаление .commentholder не исправляет вторую проблему. – DavidW

+0

Если вы добавите привязку post к классу, это событие не будет привязано к этому элементу, если вы не используете делегированные события. –

+0

Получил. Исправлена ​​первая проблема с единственным прослушивателем событий. Все еще интересно о втором, хотя – DavidW

0

Если вы просто хотите, чтобы переключаться между режимами отображения и скрытия я предлагаю использовать .toggle («») showorhide

Я создал основную скрипку для вас попробовать.

http://jsfiddle.net/LsWuR/2/

Надеется, что это помогает.

+0

Я не могу использовать $ ('. Commentbody'). непосредственно, поскольку в документе есть много, и мне нужен специально родительский ->. commenthoder ->. commentbody – DavidW

+0

Быстрое обновление было относительным. Должно быть то, что вы ищете http://jsfiddle.net/LsWuR/2/ – AJak

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