单击时出现Jquery变量

时间:2011-12-18 09:52:55

标签: javascript jquery html css ajax

这是一个jquery函数,在点击两个不同的按钮时增加num(其他函数减少数量为1),但我希望它们增加和减少SAME变量,就像现在一样,当单击一个按钮时,num会增加,但是当点击另一个按钮时,它会再次从一个按钮开始,如果你知道我的意思,那么当它应该使用来自其他数量的金额时,它会从一个按钮开始下降。

$(".eventer button[name=lol]").click(function() {

    num = $(this).data('num');
    if (typeof num != 'number') {
        num = 1;
    }
    $(this).attr('disabled', true); // don't allow a second click until previous action      has completed
    //$.ajax('javas.php', {   success: function(response) { 
    $(this).parent().next('.status').html(num);
    $(this).data('num', ++num);
    $(this).attr('disabled', false); // reset
    //})
 });
$(".eventer button[name=myBtn]").click(function() {

    num = $(this).data('num');
    if (typeof num != 'number') {
        num = 1;
    }
    $(this).attr('disabled', true); // don't allow a second click until previous action has completed
    //$.ajax('javas.php', {   success: function(response) { 
    $(this).parent().next('.status').html(num);
    $(this).data('num', --num);
    $(this).attr('disabled', false); // reset
    //})
 });

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

为什么不通过在函数外定义全局变量来使用全局变量。

var num = 1;

$(".eventer button[name=lol]").click(function() {

$(this).attr('disabled', true); // don't allow a second click until previous action      has completed
//$.ajax('javas.php', {   success: function(response) { 
$(this).parent().next('.status').html(num);
num++
$(this).attr('disabled', false); // reset
//})
 });
$(".eventer button[name=myBtn]").click(function() {

$(this).attr('disabled', true); // don't allow a second click until previous action has completed
//$.ajax('javas.php', {   success: function(response) { 
$(this).parent().next('.status').html(num);
num--;
$(this).attr('disabled', false); // reset
//})
});

答案 1 :(得分:2)

看看这个:

http://jsfiddle.net/2bwuM/13/

您不能将其声明为'a'全局变量,因为每个div需要一个计数器。这就是为什么data attribute是最好的选择。

答案 2 :(得分:0)

这是因为您将该号码存储为已点击的按钮的数据属性,而不是存储在公共位置。最简单的解决方案可能只是在两个点击处理程序之外创建变量num并让它们都引用它。如果使用document.ready处理程序定义了单击处理程序,则在document.ready处理程序中创建num作为局部变量。

这样的事情:

$(document).ready(function() {

   // both click handlers will refer to this variable:
   var num = 1;

   $(".eventer button[name=lol]").click(function() {
      var btn = $(this);
      btn.prop('disabled', true); // don't allow a second click until previous action has completed
      //$.ajax('javas.php', {   success: function(response) { 
      $(this).parent().next('.status').html(num);
      ++num;
      btn.prop('disabled', false); // reset
      //})
   });

   $(".eventer button[name=myBtn]").click(function() {
      var btn = $(this);  
      btn.prop('disabled', true); // don't allow a second click until previous action has completed
      //$.ajax('javas.php', {   success: function(response) { 
      $(this).parent().next('.status').html(num);
      --num;
      btn.prop('disabled', false); // reset
      //})
   });
});

注意已删除对.data()的所有引用。另外,我在一个局部变量中缓存$(this)因为(a)它应该更有效,但更重要的是(b)一旦你取消注释你的ajax成功处理程序,你可能会发现它在那里处理程序this不是对被点击元素的引用。此外,我已将.attr()的使用更改为.prop()。另外(我还没有做到这一点)你可能应该同时禁用/启用这两个按钮,这样用户就无法在向上结果之前点击然后向下点击。

P.S。请注意,您只需说$(this).prop('disabled', someVal)就不需要说this.disabled = someVal; - 在元素事件处理程序this中是元素本身,因此您可以直接访问/设置其属性,而不是构建一个新的jQuery对象。我没有在代码中进行此更改,但您可能应该这样做。