2012-07-14 45 views
0

我有一些单选按钮的列表,我得到点击时检查输入的值,将它存储在一个变量,然后我想访问变量时,另一个元素,例如一个div被点击。一切工作正常,除了在第二次点击事件中未被识别的变量。也许是一个可能的范围错误?变量没有被发现里面点击jquery事件

<ul><li><a href="#">Line</a><input class="checkTool" type="radio" name="drawTool"  value="line"></input></li></ul> 
      <ul><li><a href="#">Rect</a><input class="checkTool" type="radio" name="drawTool" value="rectangle"></input></li></ul> 
      <ul><li><a href="#">Circ</a><input class="checkTool" type="radio" name="drawTool" value="circle"></input></li></ul> 




$("input:radio[name=drawTool]").click(function() { 
        var currTool = $(this).val(); 
}); 


$('.space').click(function(){ 


$(this).html(currTool) 

}) 

JSFiddle

+0

为什么不学什么是变量范围以及如何使用变量? – 2012-07-14 12:21:28

+0

''currTool''是一个字符串。 – 2012-07-14 12:22:25

+0

@Kolyoly Horvath对不起,我打算输入变量。我其实是在小提琴中,但这只是我的问题中的一个错字 – menislici 2012-07-14 12:23:30

回答

1

如果你想在一个不同的方法来访问,保持在方法外声明一个变量的值。所以它比方法的范围更广。它也可以在方法外访问。

$(function(){ 

    var currTool=""; 
    $("input:radio[name=drawTool]").click(function() { 
     currTool= $(this).val(); 
    }); 

    $('.space').click(function(){ 
     $(this).html(currTool) 
    }) 

}); 
+0

这不是全局变量,它是在(外部)匿名函数的范围内声明的。 (实际上这比全局更适合此目的,因为它是内部函数可以访问的最近范围。) – nnnnnn 2012-07-14 12:25:42

+0

@nnnnnn:啊!更改句子 – Shyju 2012-07-14 12:28:39

+0

不过,不需要使用变量跟踪当前工具。您可以随时在任何给定时间点使用':checked'伪选择器检索当前选中的项目,如我在下面的答案中所示。相反,您试图通过手动记录检查状态更改来重新发明轮子,而且您甚至没有涵盖所有情况:您没有考虑带有箭头键,选项卡和/或空格键的键盘输入或其他方式导航网页,如屏幕阅读器。 – 2012-07-14 22:27:52

2

更妙的是:你可以检索当前选中的工具,当你真的需要它通过寻找检查单选按钮。

$('.space').click(function(){ 
    var currTool = $("input:radio[name=drawTool]:checked").val(); 
    $(this).html(currTool); 
}); 
+0

注意:这是好得多,因为点击不是唯一可以改变输入状态的动作。 – 2012-07-14 19:05:54