我试图创建一个简单的计数器,将1
计为5
。号码为5
后,下一个号码应重新回到1
。
当我尝试倒回且计数器为1
时会出现问题:它会变为0,而不会返回5
。
http://jsfiddle.net/tmyie/YMB3e/2/
var $i = 1;
$('.increase').click(function () {
++$i;
$('p').text($i);
if ($i == 5) {
$i = 0;
}
});
$('.decrease').click(function () {
--$i;
$('p').text($i);
if ($i == 0) {
$i = 5;
}
});
避免计数器转到0
的最佳方法是什么,而是返回5
?
答案 0 :(得分:2)
将您的代码更改为:
var $i = 1;
$('.increase').click(function () {
++$i;
if ($i > 5) {
$i = 1;
}
$('p').text($i);
});
$('.decrease').click(function () {
--$i;
if ($i <= 0) {
$i = 5;
}
$('p').text($i);
});
答案 1 :(得分:0)
错误的代码顺序。 $('p').text($i);
应该在if ($i == 0) { $i = 5 }
之后
正如@Anton在评论中所说:
如果你点击减少直到它的5然后点击增加它将会去 超过5
所以你还需要做一些改变:
var $i = 1;
$('.increase').click(function () {
++$i;
if ($i > 5) {
$i = 1;
}
$('p').text($i);
});
$('.decrease').click(function () {
--$i;
if ($i <= 0) {
$i = 5;
}
$('p').text($i);
});
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为您需要在此修改if语句 - 如果$i
为1则转到5,否则请关闭$i
。同样调整increase
功能。
$('.increase').click(function () {
if ($i == 5) {
$i = 1;
} else {
++$i;
}
$('p').text($i);
});
$('.decrease').click(function () {
if ($i == 1) {
$i = 5;
} else {
--$i;
}
$('p').text($i);
});
答案 4 :(得分:0)
更新变量后分配值:
var $i = 1;
$('.increase').click(function () {
if (++$i == 6) {
$i = 0;
}
$('p').text($i);
});
$('.decrease').click(function () {
if (--$i == 0) {
$i = 5;
}
$('p').text($i);
});
或使用mod运算符 - %
var $i = 0;
$('.increase').click(function () {
$i++;
$('p').text($i%5+1);
});
$('.decrease').click(function () {
$i = --$i==-1 ? 5 : $i;
$('p').text($i%5+1);
});
答案 5 :(得分:0)
在执行逻辑之前更新DOM。
$('.increase').click(function () {
++$i;
$('p').text($i); // <-- Update DOM
if ($i == 5) { // Logic after
$i = 0;
}
});
$ i永远不会是0
。它会在下次点击时变为5
然后1
<强>修正:强>
$('.increase').click(function () {
++$i; // Logic
if ($i == 5)
$i = 0;
$('p').text($i); // <-- Update DOM after
});
为了改进代码并使其更易于维护,我会将其放入模块中,并使代码更加可扩展且可重用。
function Counter($count, $inc, $dec, settings) { // <- Make it into a Module
settings = settings || {};
var count = settings.initialCount || 0;
var max = settings.max || 5;
var min = settings.min || 0;
$inc.click(function () {
updateCount(1);
});
$dec.click(function () {
updateCount(-1);
});
function updateCount(value){
if(count+value > max) count = min;
else if(count + value < min) count = max;
else count += value;
$count.html(count);
}
updateCount(0);
}
Counter($('.count'), $('.increase'), $('.decrease')); // <- Initiate the module
<强> http://jsfiddle.net/R5swH/3/ 强>
答案 6 :(得分:-1)
试试这个
$('.increase').click(function (e) {
$('p').text(($i==5?$i=0:++$i));
});
$('.decrease').click(function (e) {
$('p').text(($i==0?$i=5:--$i));
});