2010-12-09 3 views
4

멍청이 인 나를 용서하되이 일을해서는 안됩니까?.removeClass가 작동하지 않습니다. addClass는 어떻게 작동합니까?

$(document).ready(function() { 
    $('.button').click(function() { 
     $(this).addClass('button-clicked'); 
    }); 

    $('.button-clicked').click(function() { 
     $(this).removeClass('button-clicked'); 
    }); 

}); 

두 번째 클릭으로 수업을 삭제하고 .button으로 가져 가면 안됩니까?

는 여기가 jsfiddle에 : 지점에서 두 번째 click()를 호출하고 있기 때문에 http://jsfiddle.net/pXdwM/

답변

9

아니, 버튼 ".button - 클릭"을 따라서 이벤트 핸들러가 할당되지 않은이 없습니다. 이

$('.button').click(function() { 
    $(this).toggleClass('button-clicked'); 
}); 

처럼 다시 작성하거나 당신은 '클릭 .button -'클래스의 각 요소에 이벤트를 추가 live()

$('.button-clicked').live("click", function() { 
    $(this).removeClass('button-clicked'); 
}); 
+1

를, ** 모두 ** 핸들러 후 1을 실행하는 것입니다 클릭 다른 하나는 모든 클릭에 대해 클래스를 효과적으로 추가 및 제거합니다. (단지 질문 내 코드에 대해 언급합니다.) –

+0

신난다, 이제 알았다! 나는 .live()가하는 일을 알고있는 척하지는 않지만, .toggleClass를 이해하므로, 그것을 사용할 것입니다. 고마워. – izolate

+1

@yatman, .live는 미래 엘리먼트의 이벤트를 바인드 할 것이고 런타임에 추가 된 모든 엘리먼트는 바인드하고 싶다면 .live를 사용해야합니다. – kobe

2

를 사용하지만, 실제로 클릭 할 때까지 클래스는 적용되지 않습니다 수 . 그래서 첫 번째 콜백에 두 번째 리스너를 이동하거나 toggleClass 기능을 사용할 필요가 : 그는`선택기로 .button` 사용하는 경우에도 또한

$('.button').click(function() { 
    $(this).toggleClass('button-clicked'); 
}); 
+0

그 덕분에, 데이브. – izolate

관련 문제