Javascript 单击Jquery变量

Javascript 单击Jquery变量,javascript,jquery,html,css,ajax,Javascript,Jquery,Html,Css,Ajax,这是一个jquery函数,在单击两个不同的按钮时递增num(另一个函数递减num一个),但是我希望它们递增和递减相同的变量,就像现在一样,当单击一个按钮时,递增num,但是,当点击另一个按钮时,它会再次从一开始,然后从一开始下降,如果你知道我的意思的话,它应该使用另一个num的数量 $(".eventer button[name=lol]").click(function() { num = $(this).data('num'); if (typeof num != 'num

这是一个jquery函数,在单击两个不同的按钮时递增num(另一个函数递减num一个),但是我希望它们递增和递减相同的变量,就像现在一样,当单击一个按钮时,递增num,但是,当点击另一个按钮时,它会再次从一开始,然后从一开始下降,如果你知道我的意思的话,它应该使用另一个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
    //})
 });

非常感谢您的帮助。

为什么不在函数外部定义全局变量来使用它呢

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
//})
});

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

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
//})
});

您只需将
num
放入全局范围。(我还修复了禁用的
属性。)


这里有一个JSFIDLE显示它的工作原理:

您只需要将
num
放在全局范围内。(我还修复了禁用的
属性。)


这里有一个JSFIDLE显示它的工作原理:

这是因为您将数字存储为所单击按钮的数据属性,而不是存储在公共位置。最简单的解决方案可能只是在两个单击处理程序之外创建一个变量
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()
的使用更改为。另外(我还没有这么做),您可能应该同时禁用/启用这两个按钮,这样用户就不能在弹出结果出现之前单击“向上”和“向下”


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

这是因为您将数字存储为所单击按钮的数据属性,而不是存储在公共位置。最简单的解决方案可能只是在两个单击处理程序之外创建一个变量
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()
的使用更改为。另外(我还没有这么做),您可能应该同时禁用/启用这两个按钮,这样用户就不能在弹出结果出现之前单击“向上”和“向下”

请注意,当您可以简单地说
this.disabled=someVal时,您永远不需要说
$(this).prop('disabled',someVal)
-在元素事件处理程序
中,此
是元素本身,因此您可以直接访问/设置其属性,而不是为其构建新的jQuery对象。我没有在代码中进行此更改,但您可能应该进行此更改。

请查看以下内容:

不能将其声明为“a”全局变量,因为每个div都需要一个计数器。这就是为什么
数据属性是最好的选择。

看看这个:


不能将其声明为“a”全局变量,因为每个div需要一个计数器。这就是为什么
数据属性是最好的选择。

所以基本上有两个按钮,一个递增,另一个递减?但我不明白的是,你试图递增和递减的数字的初始值,在这两种情况下,它的值num=1,但我需要它们与一个和另一个同步,所以假设你点击一个递增5倍的数字,使其值为6,然后点击递减一次,我希望值为5,但代码是从递减函数的1开始的,而不是num的原始值必须声明num为全局变量,所以基本上有两个按钮,一个递增,另一个递减?但我不明白的是,你试图递增和递减的数字的初始值,在这两种情况下,它的值num=1,但我需要它们与一个和另一个同步,所以假设你点击一个递增5倍的数字,使其值为6,然后点击递减一次,我希望值为5,但代码所做的是从递减函数的1开始,而不是num的原始值必须将num声明为全局变量如果我将其声明为全局变量,没有显示任何内容我用一个JSFIDLE更新了我的示例,显示了它的工作原理——请检查以确保包含jQuery等。如果我将其声明为全局变量,没有显示我用一个JSFIDLE更新了我的示例,显示了它的工作原理——请检查以确保包括jQuery等。如果他需要为一堆
s这样做,这很好,+1。我碰巧从昨天的问题中知道他这样做了。他应该在昨天的jsfiddle中发布这个问题。+1:我几乎建议在父对象上添加一个数据属性,但后来我想,当一个简单的变量可以做到这一点时,为什么要把事情复杂化呢?所以我