我有以下代码。
var stackMapIn = [];
var stackMapOut = [];
var stackBack = [];
stackMapOut.push("m1");
$scope.clickLinks = function(initialOut,initialIn,extra,backIn,backOut,name){
$('div#'+initialOut+'Map,'+extra).fadeOut('slow',function(){
$('.'+initialOut+'Details,.bkbtn'+backOut).css("display","none");
$('.'+initialIn+'Details,.bkbtn'+backIn).css("display","block");
$('.noQuery').css("display","none");
$("#buildingHeader").html(name);
$('div#'+initialIn+'Map').fadeIn('slow');
})
stackMapOut.push(initialIn);
stackMapIn.push(initialOut);
stackBack.push(backIn);
}
$scope.clickBack = function(bkbtnCheck){
alert(stackBack[0]);
mapOut = stackMapOut.pop();
mapIn = stackMapIn.pop();
stackBack.pop();
backIn = stackBack[0];
alert(backIn);
$('div#'+mapOut+'Map').fadeOut('slow',function(){
$('.'+ mapOut + 'Details,.bkbtn').css("display", "none");
$('.' + mapIn + 'Details,.bkbtn'+backIn).css("display", "block");
$(".noQuery").css("display","none");
$("#buildingHeader").html("Name");
$('div#' + mapIn + 'Map').fadeIn('slow');
})
}
现在,我将快速浏览一下此代码运行时会发生什么。
第一次点击链接运行:
initialIn ='m2'
initialOut ='m1'
backIn ='主页'
clickBack 尚未运行。
第二次 clickLinks 运行:
initialIn ='m7'
initialOut ='m2'
backIn ='CentralPortfolio'
好的,所以在这一点上应该看起来像这样(我期待):
stackMapOut = ['m1','m2','m7']
stackMapIn = ['m1','m2']
stackback = ['Home','CentralPortfolio']
现在我们运行 clickBack ...为什么警报输出“Home”??
我想在这里做的是,当 clickLinks 运行时,我有一系列事物出现并消失。有时,用户可以运行 clickBack 以返回先前的状态(状态)。所以,我正在使用 JavaScript堆栈来跟踪它所处的状态,以及它需要返回的位置。
问题是,我可以运行 clickLinks 一次,clickBack连续一次没有问题。我甚至可以再次运行 clickLinks ,仍然可以单击后退按钮2次(返回开始)而不会出现问题。但我仍然不明白为什么 stackBack [0] (应该是堆栈的顶部?) =“Home”此时而不是“CentralPortfolio”。
因为我遇到了真正的问题,如果我第三次运行 clickLinks :仍然 stackBack [0] ='Home'(当我希望它时此时是“CentralCampus”)因此,它显示的是“Home”后退按钮(正确的其他内容按照 mapOut 和 mapIn 显示)而不是CentralPortfolio'后退按钮显示;因为我在使用它之前“弹出”了“CentralCampus”。
如果需要任何其他信息,或者您需要更多说明,请告知我们。我尽力提供任何所需的信息,并尽可能清楚。
答案 0 :(得分:2)
现在我们运行clickBack ...为什么警报输出" Home" ??`
因为stackBack[0]
是Home
。你期望它做什么?你甚至在你的问题中都有它:
stackback = ['Home','CentralPortfolio']
索引0
是数组中的第一个元素,即Home
。最后一个元素是stackBack[stackBack.length - 1]
使用JavaScript堆栈
不,你使用的是javascript数组,但是像堆栈一样使用它。除非您将其索引为数组 - 这是您混淆的根源。您可以将其用作pop
和push
的堆栈,但不要尝试使用[]
当你在数组上push
时,你会向数组的结尾添加一个元素。换句话说,它最终成为索引yourArray.length - 1
的最后一个元素。当你pop
时,你再次从阵列中取出最后一个元素。因此,弹出stackback
将会返回CentralPortfolio
,当然,第一个元素不会改变。