2011-12-21 5 views
1

간단한 범위 지정 문제로 인해 나를 피합니다.자바 스크립트 변수 범위 문제

다음은 간단한 코드 버전이지만 동일한 원칙을 사용합니다. 사용자가 selector_1myVAR이 채워 것 클릭한다면

function myFunction(){ 
    $('.selector_1, .selector_2').click(function(e){ 
    var $trgt = $(e.target); 
    var myVAR; 

    if ($trgt.is('.selector_1')){ 
     myVAR = 'selector_1'; 
    } 

    if ($trgt.is('.selector_2')){ 
     myVAR = 'selector_2'; 
    } 
    console.log(myVAR); 
    } 
} 

문제는 성공적 때마다, 그러나, 2 차 목표 핸들러는 항상 myVAR가 정의되지 않은 반환됩니다.

저는 이것이 프로그래밍 101 유형이라고 가정하고 있지만 아직 간단한 답을 찾지 못했습니다.

감사합니다. 비판은 공개적으로 평가되었습니다.

+1

여기에 작동합니다 http://jsfiddle.net/xaGpW/ – georg

+2

마크 업을 게시하시기 바랍니다! – Mathletics

답변

5

사용해보십시오 .

바이올린 데모 : http://jsfiddle.net/maniator/M6fYf/

+0

+1 - 멋지게 완료 –

+0

@ AdamRackis 고맙습니다^_^방금 CSS의 허구를 추가했습니다 :-D – Neal

+0

Adam Rackis 솔루션과 Neal을 결합하면 http://jsfiddle.net/M6fYf/4/ 어느 작품이 나옵니까 . ;) – nybbler

2

해당 코드 이어야합니다. 어쩌면 e.target이 일부 요소 유형에 대해 올바르게 작동하지 않습니다. 대상이 범위가 아니라 선택입니다 bacause 두 번째 하나를 클릭하면

<div class='selector_1'>HELLO</div> 

<div class='selector_2'><span>HI THERE</span></div> 

그래서 당신이 정의되지 않은 얻을 대신 e.target의, 당신의 HTML은 아마이 같은 것입니다 this

function myFunction(){ 
    $('.selector_1, .selector_2').click(function(e){ 
    var $trgt = $(this); 
    var myVAR; 

    if ($trgt.is('.selector_1')){ 
     myVAR = 'selector_1'; 
    } 

    if ($trgt.is('.selector_2')){ 
     myVAR = 'selector_2'; 
    } 
    console.log(myVAR); 
    } 
} 
+1

@nybbler - 원래 $ (계속)을 계속 선택했습니다 - OPs $ trgt 변수를 유지하도록 변경했지만 $ (this)로 설정했습니다 - 동일한 효과가 있지만 $ (this) 이상을 다시 선택하지 않고도 –