2011-12-21 74 views
1

我有一個簡單的範圍問題,讓我無法理解。Javascript可變範圍問題

這是一個簡單版本的代碼,但採用相同的原則。

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); 
    } 
} 

的問題是,如果用戶點擊selector_1myVAR將得到填充成功每一次,然而,第二目標處理程序將始終返回myVAR爲未定義。

我假設這是一個編程101類型的事情,我還沒有找到一個明確的答案,但是。

謝謝你看看這個!批評公開表示讚賞。

+1

在這裏工作:http://jsfiddle.net/xaGpW/ – georg 2011-12-21 17:56:30

+2

請發表您的標記! – Mathletics 2011-12-21 17:59:57

回答

5

你的HTML可能是這樣的:

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

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

所以,當你點擊第二個,你得到了一個未定義bacause目標是跨度,而不是選擇。

小提琴演示:http://jsfiddle.net/maniator/M6fYf/

+0

+1 - 很好地完成 – 2011-12-21 17:59:49

+0

@AdamRackis還得感謝^ _ ^我只是增加了一些CSS花式:-D – Neal 2011-12-21 18:02:25

+0

結合亞當Rackis解決方案和尼爾的,你會得到這樣的:http://jsfiddle.net/M6fYf/4/其中一期工程。 ;) – nybbler 2011-12-21 18:02:27

2

該代碼應該工作。對於某些元素類型,可能e.target的行爲不正確?取而代之的e.target,請嘗試使用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 - 我原來一直在反覆選擇$(this) - 我改變它以保持OPs $ trgt變量,但將其設置爲$(this) - 效果相同,但不需要重新選擇$(this)在 – 2011-12-21 18:07:38