我有这个代码,当点击按钮(设置号码)时会创建一个随机数
然后当您点击另一个按钮(获取号码)时,它将在警报时检索随机数
jQuery('.button1').on('click',function (){
var num = Math.random();
jQuery('.button2').on('click',function (){
alert(num);
});
});
行动中的代码http://jsfiddle.net/Jim_Toth/dYTEq/
我遇到的问题是,当用户再次点击(设置号码)以获取新号码时。然后点击(获取号码)警报将使用旧号码和新号码检索两次。如果第三次点击它们,它将检索三倍。
如何仅检索最新的随机数?
答案 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)
尝试
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
});
答案 3 :(得分:0)
不要使用闭包。
var num;
jQuery('.button1').on('click',function (){
num = Math.random();
});
jQuery('.button2').on('click',function (){
alert(num);
});
答案 4 :(得分:0)
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不会在全局(即窗口)范围内。