这是一个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
//})
});
感谢任何帮助。
答案 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)
答案 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对象。我没有在代码中进行此更改,但您可能应该这样做。