Javascript 单击Jquery变量
这是一个jquery函数,在单击两个不同的按钮时递增num(另一个函数递减num一个),但是我希望它们递增和递减相同的变量,就像现在一样,当单击一个按钮时,递增num,但是,当点击另一个按钮时,它会再次从一开始,然后从一开始下降,如果你知道我的意思的话,它应该使用另一个num的数量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
$(".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:我几乎建议在父对象上添加一个数据属性,但后来我想,当一个简单的变量可以做到这一点时,为什么要把事情复杂化呢?所以我