Javascript on函数为字符串变量拥有的所有值运行,而不仅仅是其当前值

Javascript on函数为字符串变量拥有的所有值运行,而不仅仅是其当前值,javascript,jquery,html,packery,Javascript,Jquery,Html,Packery,我正在使用Packery JS创建一个卡片布局。在这个布局中,我使用。移动完成后,我滚动到移动的div;我等待,然后使用jQuery的scrolltop滚动到有问题的div。这是我目前用于滚动部分的代码: $container.packery( 'on', 'fitComplete', function () { $('html,body').animate({ scrollTop: $("#" + moveItem).offset().top - 40 });

我正在使用Packery JS创建一个卡片布局。在这个布局中,我使用。移动完成后,我滚动到移动的div;我等待,然后使用jQuery的scrolltop滚动到有问题的div。这是我目前用于滚动部分的代码:

$container.packery( 'on', 'fitComplete', function () {
    $('html,body').animate({
        scrollTop: $("#" + moveItem).offset().top - 40
    });
    console.log("scroll to: " + moveItem + ", position: " +($("#"+moveItem).offset().top - 40))
});
在第一次单击时,这将按预期工作,这是moving div#vision的输出:

但在第二次单击(移动div#project-6)时出现错误:

scroll to: project-6, position: 616
scroll to: vision, position: 69
它首先滚动到project-6,然后立即转到moveItem的上一个值vision。在随后的单击中,列表只会变长

所以我的问题是:为什么它会记住moveItem变量之前的值?我怎样才能阻止它这样做

对于上下文。可通过搜索“//移动功能”找到相关代码


提前谢谢

执行
$container.packery('on',…)时会发生这种情况多次。我的猜测是,您每次单击按钮时都会附加另一个事件处理程序,而不是在页面设置中附加一次,然后确保在单击按钮时触发事件。

执行
$container.packery('on',…)多次。我的猜测是,您每次单击按钮时都会附加另一个事件处理程序,而不是在页面设置中附加一次,然后确保在单击按钮时触发事件。

。将此功能更改为:

                //Move Function
            var moveThis = function(moveItem, moveTarget){
                if (moveTarget == "stamp" && $("#" + moveItem).hasClass("w2") && 720 < window.innerWidth && window.innerWidth < 992) {
                    var targetX = 0;
                    var targetY = $("#stamp").height() + 40;
                    $container.packery('fit', document.getElementById(moveItem), targetX, targetY);
                } else if (moveTarget == "stamp") {
                    var arrayList = $container.packery('getItemElements')
                    var targetX = $(arrayList[0]).position().left
                    var targetY = $(arrayList[0]).position().top
                    $container.packery('fit', document.getElementById(moveItem), targetX, targetY);
                } else {
                    var arrayList = $container.packery('getItemElements')
                    positionList = arrayList.indexOf(document.getElementById(moveTarget))
                    var targetX = $(arrayList[positionList+1]).position().left
                    var targetY = $(arrayList[positionList+1]).position().top
                    $container.packery('fit', document.getElementById(moveItem), targetX, targetY);
                }

            };

关于
$(moveItem.element).attr('id')
,我不太确定-对于这个控制台,我将更具体地介绍它的功能。将此功能更改为:

                //Move Function
            var moveThis = function(moveItem, moveTarget){
                if (moveTarget == "stamp" && $("#" + moveItem).hasClass("w2") && 720 < window.innerWidth && window.innerWidth < 992) {
                    var targetX = 0;
                    var targetY = $("#stamp").height() + 40;
                    $container.packery('fit', document.getElementById(moveItem), targetX, targetY);
                } else if (moveTarget == "stamp") {
                    var arrayList = $container.packery('getItemElements')
                    var targetX = $(arrayList[0]).position().left
                    var targetY = $(arrayList[0]).position().top
                    $container.packery('fit', document.getElementById(moveItem), targetX, targetY);
                } else {
                    var arrayList = $container.packery('getItemElements')
                    positionList = arrayList.indexOf(document.getElementById(moveTarget))
                    var targetX = $(arrayList[positionList+1]).position().left
                    var targetY = $(arrayList[positionList+1]).position().top
                    $container.packery('fit', document.getElementById(moveItem), targetX, targetY);
                }

            };

我不确定
$(moveItem.element).attr('id')
-对于这个控制台,看看它有什么

是的,这就成功了!滚动代码在另一个函数中,现在我把它放在了它应该工作的外部。谢谢是的,这就成功了!滚动代码在另一个函数中,现在我把它放在了它应该工作的外部。谢谢
 $container.packery( 'on', 'fitComplete', function ( moveItem ) {
                    $('html,body').animate({
                        scrollTop: $("#" + $(moveItem.element).attr('id')).offset().top - 40
                    });
                    console.log("scroll to: " + $(moveItem.element).attr('id') + ", position: " +($("#"+moveItem).offset().top - 40))
                });