2011-12-07 2 views
3

이전 이벤트 이후에 변경된 선택기를 잡는 jquery 빌드를 작성하는 데 문제가 있습니다.Jquery 수정 된 선택자 클래스가 선택되지 않았습니다.

<div class='1'>test</div> 

난 다음에 그것을 클릭하면 :

예를 들어,이처럼 보이는 일부 HTML이

$(".1").click(function(){ 
    alert('found 1!'); 
    $(this).attr('class', '2'); 
}); 

경고의 작품과 내가 요소는 검사 할 때

: 클래스는 내가 다음에, 다시 클릭하면

이제 '2'로 전환되었습니다

여전히 '찾았습니다 1!' 경고로.

나는 어떤 이유로 든 가능하지 않다고 생각합니까, 잘못하고 있습니까? 아니면 더 좋은 방법이 있습니까? 감사!

+1

함께 작업하려면 [.removeClass()] (http://api.jquery.com/removeclass/)/[.addClass()] (http://api.jquery.com/addclass/)를 사용해야합니다. 수업. CSS 클래스 이름은 숫자 ([spec (http://www.w3.org/TR/CSS2/syndata.html#characters)]로 시작될 수 없습니다. –

+0

.live() (http : // api. jquery.com/live/). –

답변

4

당신은 동적으로 업데이트 요소에 대한 이벤트를 바인딩 JQuery와에게 .on() (또는 .delegate()) 함수를 사용해야합니다. 아래와 같이 코드

,

$(".1").on("click", function(){ 
    alert('found 1!'); 
    $(this).attr('class', '2'); 
}); 

$(".2").on("click",function(){ 
    alert('found 2!'); 
    $(this).attr('class', '1'); 
}); 
+0

"나는 .on() (또는 .delegate())를 사용해야합니다."라고 말했을 것입니다. .delegate()가 1.4.2에 추가 되었기 때문에 .live()는 더 이상 사용되지 않으므로 다시 언급해서는 안됩니다. –

+0

감사합니다. @DidierG. 나는 그것에 대해 몰랐다. 귀하의 의견에 따라 업데이트되었습니다. –

3

.click는()는 실행 시간에 결합한다. 당신이 찾고있는 것은 .live() 또는 .on()입니다. 당신은 특정 DOM 요소에 바인딩

$(".1").click(function() 

:이 작업을 수행 할 때

$(document).on("click", ".1", function() { 
    console.log('1 clicked'); 
    $(this).attr('class', '2'); 
}); 
$(document).on("click", ".2", function() { 
    console.log('2 clicked'); 
    $(this).attr('class', '1'); 
}); 
+0

'.live()'는 더 이상 사용되지 않으며 더 이상 언급하지 않아야합니다. –

+0

사실이지만 그가 jQuery를 사용하고 있다면 .on()을 아직 사용할 수 없습니다. – Interrobang

+0

'.delegate()'(이전의'.on()')가 1.4 버전에서 추가되었는데, 이것은 지금까지 조금 유산되었습니다 ;-) –

1

: 나는) (JQuery와 1.7 구문을 CSTE 연구진 사용합니다. 일단 바인딩되면 더 이상 객체의 클래스가 중요하지 않습니다. 이벤트 핸들러는 객체 자체에 바인딩됩니다. jQuery가이 문을 실행하는 방식은 class="1"으로 모든 DOM 객체를 찾아 이벤트 리스너를 설정한다는 것입니다. 당신이 이벤트 핸들러가 페이지에 동적 변경을 처리하려면

는, 당신은 jQuery의 .live() 또는 .delegate() (jQuery를 1.6 또는 그 이전) 또는 jQuery의 .on() (jQuery를 1.7+)를 사용합니다.

관련 문제