2011-12-21 75 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