2010-05-14 2 views
1


의 반환 값 this.id이 함수에서 함수로 다양 할 때 JQuery를 사용하여 DIV에 동적 효과를 적용하고있었습니다.this.id가 정확히 무엇입니까?


나는 다음과 같은 간단한 부모 - 자식 DIV 태그의 두 세트를 가지고 :

 <DIV ID="row"> 
     <DIV ID="c1">    
     <Input type="radio" name="testing" id="testing" VALUE="1">testing1 
     </DIV> 
     </DIV> 
     <DIV ID="row"> 
     <DIV ID="c2">    
     <Input type="radio" name="testing" id="testing" VALUE="2">testing2 
     </DIV> 
     </DIV> 

코드 1.

$('#row DIV').mouseover(function(){ 
radio_btns.each(function() { 
$('#row DIV).addClass('testing'); // worked 
}); 
}); 


코드 2.

$('#row DIV').mouseover(function(){ 
var childDivID = this.id; 
radio_btns.each(function() { 
$('#'+childDivID).parent('DIV').addClass('testing'); // didn't work 
}); 
}); 


I 돈 왜 첫 번째 코드 만 작동 할 수 있는지 이해하지 못합니다.
및 모든 "행"DIV,
강조 표시하지만 두 번째 코드는 그렇게하지 못했습니다?

+0

가능한 중복 :이 경우 호버를 원한다면

또 하나 개의 항목, 질문 밖에서 정말, .hover().toggleClass(), like this를 사용 둘러싼 루프] (http://stackoverflow.com/questions/2828718/javascript-scope-problem-when-lambda-function-refers-to-a-variable-in-enc-losing-l) –

+0

"하지만 * 초를 의미합니다. * 코드가 그렇게하지 못했습니다 "? – edwin

+1

동일한 페이지에서 동일한 ID를 가진 두 개의 요소를 가질 수 없습니다. – edwin

답변

3

첫째, 동일한 ID를 여러 번 있고,이 이상한 행동의 모든 종류의로 이어질 것입니다. 즉 수정 일단

가, 두 번째 코드 예를 들어, 당신은 like this (.row는 ID 문제를 제거하기 위해 이제 클래스 주) 호버의 현재 행을 강조하기 위해 조정이 필요합니다

그러나
$('.row div').mouseover(function(){ 
    $('#'+this.id).parent('div').addClass('testing'); 
});​ 

, 이미 객체에 대한 참조를 갖고 있기 때문에 이것에 대해 갈 수있는 더 좋은 방법이있다 like this :

$('.row div').mouseover(function(){ 
    $(this).addClass('testing'); 
});​ 
일반적으로

당신이 $("#"+this.id)을 사용하고자 할 위치 당신이 경우에, 나는 경우 생각할 수 없다 말하기 this이 있으면 원하는 jQuery 객체를 얻으려면 $(this)이어야합니다. 람다 함수의 변수를 참조 할 때 [자바 스크립트 범위 문제의

$('.row div').hover(function(){ 
    $(this).toggleClass('testing'); 
});​ 
+0

왜 #row 대신에 .row입니까? JQuery의 의미가 다른가요? – user327712

+0

@kwokwai -'.row'는'class' 행을 가진 요소를 찾고'# row'는'id' 행을 찾습니다. –

1

이 시도 : 그것은 잘못된 HTML 이후

var childDivID = $(this).attr('id'); 
관련 문제