JavaScript变量设置为0容易混淆

时间:2013-10-04 08:52:21

标签: javascript jquery

我有一段代码,我已经写过,应该跟踪哪个图像将在页面上显示,具体取决于按下哪个按钮

 $(document).ready(function(){
            $("#moveleft").click(function(){
                var negoff = "false";
                $("#slideshow>ul>li").animate({left: '-=' + actualwidth + 'px'}, 500);
                $("#slideshow>ul>li:first-child").remove();
                offset++;
                console.log("Offset: " + offset);
                if(offset > 4){
                    offset = 0;
                }
                if(offset < 0){
                    offset = offset * -1;
                    negoff = true;
                }
                $("#slideshow>ul").append('<li><img src="images/' + 
                    contentcategories[offset] + '.jpg"/></li>');
                $("#slideshow>ul>li:last-child").css({width: picturewidth +  "px", 
                    left: + 6 * actualwidth + "px"});
                if(negoff){
                    offset = offset * -1;
                    negoff = false;
                }
            });
            $("#moveright").click(function(){
                var posoff = "false";
                $("#slideshow>ul>li").animate({left: '+=' + actualwidth + 'px'}, 500);
                $("#slideshow>ul>li:last-child").remove();
                offset--;
                console.log("Offset: " + offset);
                if(offset < -4){
                    offset = 0;
                    console.log("Offset: " + offset);
                }
                if(offset > 0){
                    offset = offset * -1;
                    posoff=true;
                    console.log("Posoff: " + posoff);
                }
                $("#slideshow>ul").prepend('<li><img src="images/' + 
                    contentcategories[(contentnum - 1) + offset] + '.jpg"/></li>');
                $("#slideshow>ul>li:first-child").css({width: picturewidth +  "px", 
                    left: + 0 + "px"});
                if(posoff){
                    offset = offset * -1;
                    posoff = false;
                }
            });
        });

令人困惑的是,如果我连续两次点击#moveright按钮,偏移量将变为-1,然后变为0并继续循环显示2个值。 #moveleft按钮几乎发生了同样的事情。它循环显示值0和1.

我对此感到困惑,因为我将偏移量变量设置为0的唯一地方是如果超过4或低于-4而且我没有看到它在变为2之后被设置为0的原因或-2。

2 个答案:

答案 0 :(得分:1)

var negoff = "false";var posoff = "false";删除引号。

您的代码可能会被重构一些,但这既不是在这里也不是在那里。问题的关键在于"false" == true,因为非空字符串在JavaScript中是真正的值。我认为这只是一个错字,但这就是发生的事情:

offset从0开始。如果单击#moveLeft,它将增加到1.然后它乘以-1,因为if(negoff)将为真。所以现在它是-1,然后下一次点击将其增加回0.冲洗并重复。 #moveRight发生了相反的情况。

答案 1 :(得分:1)

让我们来看看你在这里做了什么。你正在将一个字符串写入变量,试图将其用作布尔值,i。即true和false,然后,在if语句中,检查变量是否为:not null,not undefined,not false。这里很棘手的事实是它实际上是定义的,它不是null,而且它是一个字符串(“false”)

长话短说:删除“假”周围的“”,应该没问题。