2013-11-21 4 views
1

у меня есть этот код, который создает случайное число, когда нажмите на кнопку (набор номера)Получить последнее значение переменной только

Затем при нажатии на другую кнопку (получить номер), он будет получать случайное число на предупреждение

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

код в действии http://jsfiddle.net/Jim_Toth/dYTEq/

проблема я столкнулся в том, что, когда пользователь нажимает на (номер набора) снова, чтобы получить новый номер. Затем нажимает на (получить номер) предупреждение получает дважды со старым номером и новым номером. Если вы нажмете их в третий раз, он получит тройку.

Как вы можете получить только последнее случайное число?

ответ

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/

0

Попробуйте

fiddle Demo

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


Проблема

Вы добавляете click обработчик в .button1 мыши на .button2 так что присоединенные несколько раз, поэтому вы получите много предупреждений

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

0

Не используйте затворы для этого.

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

Проблема заключается в том, что вы добавляете обработчик события клика к несколько раз второй кнопки. Ваш код в основном говорит: «Когда нажата кнопка1, добавьте обработчик события click to button2». Но новый обработчик события клика не будет обрабатывать уже существующие обработчики событий кликов.

Вы можете сделать это:

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

Таким образом, каждый обработчик события только присоединенную один раз. Я добавил функцию вокруг этого кода, поэтому num не будет находиться в глобальной (то есть окне) области.

Смежные вопросы