我有一个全局变量“isOnSecond”,最初设置为false
这是连接到检测布尔值的if语句,如果是,则执行某些操作,然后将布尔值设置回false。因此我希望这个动作能够在一半时间内完成。
我的问题是这个,我知道我在这个功能中遇到了逻辑问题,但是我现在似乎无法想出一个解决方案。
我应该如何使用我想要的逻辑重新使用此功能?
function transComplete()
{
slideTransStep = 0;
crtSlideIndex = nextSlideIndex;
alert(isOnSecond);
// for IE filters, removing filters re-enables cleartype
if (nextSlide.style.removeAttribute)
nextSlide.style.removeAttribute("filter");
// show next slide
showSlide((crtSlideIndex >= totalSlides) ? 1 : crtSlideIndex + 1);
if (isOnSecond == true){
//unhighlight all controls
for (var i=0; i < slidesControllersCollection.length; i++){
if (slidesControllersCollection[i].className === slideHighlightClass)
slidesControllersCollection[i].className = ""; }
// highlight the control for the next slide
if (slidesControllersCollection[i].className === slideHighlightClass)
document.getElementById("slide-control-" + crtSlideIndex+1).className = slideHighlightClass;
isOnSecond = false;
}
isOnSecond = true;
}
答案 0 :(得分:0)
最后需要'else',否则isOnSecond将始终设置为true。
if (isOnSecond == true){
//unhighlight all controls
//lots of code here
isOnSecond = false;
} else {
isOnSecond = true;
}
答案 1 :(得分:0)
if (isOnSecond == true) { // do work only every second time isOnSecond = false; } isOnSecond = true;
这将始终将isOnSecond
设置为true,即使您之前刚刚将其设置为false。相反,使用
if (isOnSecond) {
// do work only every second time
isOnSecond = false;
} else {
isOnSecond = true;
}
或
if (isOnSecond) {
// do work only every second time
}
isOnSecond = !isOnSecond;
答案 2 :(得分:0)
if ($this === $that) {
//Logic
isOnSecond = false;
}
isOnSecond = true;
这段代码将确保isOnSecond
只有在解释器完成if语句并移动到下一行时才会出错,我可以向你保证这是一段非常短的时间
似乎你应该松开函数末尾的isOnSecond = true
,并且只有当你真正需要它而不是永远时才将它再次声明为真。
答案 3 :(得分:0)
看起来你正在使用if语句
if (isOnSecond == true){
stuff . . .
isOnSecond = false;
}
然后将isOnSecond设置为true
isOnSecond = true;
如果你这样做:
if (isOnSecond == true){
stuff . . .
isOnSecond = false;
}else{
isOnSecond = true;
}
这将阻止isOnSecond始终显示为“true”。换句话说,如果它设置为true,它将变为false,如果设置为false,它将变为true。