仅获取变量的最新值

时间:2013-11-21 13:39:52

标签: javascript jquery

我有这个代码,当点击按钮(设置号码)时会创建一个随机数

然后当您点击另一个按钮(获取号码)时,它将在警报时检索随机数

jQuery('.button1').on('click',function (){
    var num = Math.random();
    jQuery('.button2').on('click',function (){
       alert(num);
    });
});

行动中的代码http://jsfiddle.net/Jim_Toth/dYTEq/

我遇到的问题是,当用户再次点击(设置号码)以获取新号码时。然后点击(获取号码)警报将使用旧号码和新号码检索两次。如果第三次点击它们,它将检索三倍。

如何仅检索最新的随机数?

6 个答案:

答案 0 :(得分:2)

您在.button2点击处理程序中定义了.button1点击处理程序。将num变量设为全局变量并将其设置为第一个变量,然后在第二个变量中对其进行提醒。

var num;
jQuery('.button1').on('click',function (){
   num = Math.random();
});

jQuery('.button2').on('click',function (){
   alert(num);
});

在此处查看有效版本:http://jsfiddle.net/j8zGP/

答案 1 :(得分:0)

尝试

fiddle Demo

var num;
jQuery('.button1').on('click', function () {
    num = Math.random();
});
jQuery('.button2').on('click', function () {
    alert(num);
});

<小时/> 问题

您正在click点击.button1添加.button2处理程序,因此会多次附加,这就是您收到许多提醒的原因

答案 2 :(得分:0)

问题在于,每次点击button1,您都会向button2添加新的事件处理程序。每次点击button2时,它都会运行所有附加的事件处理程序,这与您点击button1的次数相同。

尝试分离您的事件注册并使用全局变量,以便两个函数都可以访问它......

var num;//global variable can be accessed by both functions

jQuery('.button1').on('click',function (){
    num = Math.random();//sets the global variable ready to be used by other functions
});

jQuery('.button2').on('click',function (){
    alert(num);//alerts the global variable, as set by the other function
});

Here is a working example

答案 3 :(得分:0)

不要使用闭包。

var num;
jQuery('.button1').on('click',function (){
    num = Math.random();
});
jQuery('.button2').on('click',function (){
   alert(num);
});

答案 4 :(得分:0)

http://jsfiddle.net/dYTEq/2/

var num;
jQuery('.button1').on('click',function (){
    num = Math.random();
});
jQuery('.button2').on('click',function (){
    alert(num);
});

答案 5 :(得分:0)

问题是,您是多次将click事件处理程序添加到第二个按钮。您的代码基本上是“单击button1时,向button2添加单击事件处理程序”。但是新的单击事件处理程序不会使现有的单击事件处理程序失效。

你可以这样做:

(function () {
    var num;
    jQuery('.button1').on('click', function (){
        num = Math.random();
    });
    jQuery('.button2').on('click', function (){
       alert(num);
    });
}());

这样每个事件处理程序只附加一次。我在该代码周围添加了函数,因此num不会在全局(即窗口)范围内。