获取.length元素的数量是不准确的?

时间:2015-09-29 09:01:26

标签: jquery html

我在我正在处理的网站的管理员页面上有一个页面。此页面用于将图像添加到产品列表中。我使用jQuery来计算页面上的thumnails数量(等于分配给产品的图片数量),当有5个时,它会删除按钮以添加更多图片。这应该有效地限制允许上传到5的图像数量。

"添加图片"菜单有三个类别。您可以使用网址,使用之前上传的图片或上传新图片。

我离开页面的唯一时间是上传新图片。上传新图像时,会提交表单并重置页面。出于某种原因,jQuery没有在重新加载时注册新图像。

这位于脚本顶部附近。此脚本位于外部JS文件中,该文件位于结束正文标记之前:

var pictureCount = $(".thumbnail-container").length;
if (pictureCount == 5) {
    $("#add-picture").hide();
} else {
    $("#add-picture").show();
}

这是在添加先前上载的图像或从URL添加图像时调用的函数。 (我也使用相同的功能来减少删除缩略图时的图片数量):

var removeAddButton = function(operator) {
    if (operator == "+") {
        pictureCount++;
    } else if (operator == "-") {
        pictureCount--;
    }
    if (pictureCount == 5) {
        $("#add-picture").hide();
    } else {
        $("#add-picture").show();
    }
};

每个缩略图都有一张图片和一个按钮,该按钮删除位于div的{​​{1}}类缩略图。通过在刷新页面时将变量定义为具有类thumbnail-container的元素的数量(当上载图片并且POST通过时),页面应该知道有多少图片。

然而,在我上传图像后,计数仍为0.如果我上传另一张图像,则为1.我已通过警报和控制台日志确认了这一点。奇怪的是,如果我运行第一个片段,但将其保存在thumbnail-container匿名函数中,则页面知道重新加载的计数。但是,当我将代码段包装在window.onload中时,第二个代码段在调用函数时不会影响计数。

这是为什么?我该如何解决这个问题?

P.S。

上传新图像时,PHP会负责将新缩略图添加到页面中。由于PHP在JS启动之前就完成了,它应该知道计数。

1 个答案:

答案 0 :(得分:3)

如果第一个脚本在窗口加载事件处理程序中,那么如果它正在工作,那么您可以创建pictureCount作为全局变量,如下所示,然后在加载事件处理程序上设置其初始值,以便{{ 1}}将能够访问它

removeAddButton