我在jQuery中编写了一个名为loadFileList的自定义函数。它应该收集有关服务器上的文件的一些信息,并将它们显示为div。它将ID列表作为参数,因此它知道要显示的文件。
$.fn.loadFileList = function($IDList){
copy = $(this);
$(this).html("");
$.ajax({
type: "POST",
url: "https://www.domain.com/index.php?action=getFileList",
data: { IDs:$IDList }
}).done(function( jsonList ) {
files = JSON.parse(jsonList);
for(i=0; i < files.length; i++) {
copy.append('<div class="file">'+ files[i].data.title +'</div>');
}
});
};
此函数全局存储在名为functions.js的js文件中,然后从网页中的内联js调用函数本身,如下所示:
$("#file-container").loadFileList("55,80,21");
现在的问题是,如果我想添加多个文件列表,例如
$("#file-container-1").loadFileList("55,80,21");
$("#file-container-2").loadFileList("77,4");
只有最后一个正在运作。我确信这只是jQuery中引用的一个问题,但我不知道如何解决它。谢谢你的帮助!
答案 0 :(得分:0)
正如Jason P提到的评论,您需要将变量本地。
Local表示变量仅存在于函数中。您可以通过在函数中声明它来完成此操作:
$.fn.loadFileList = function($IDList){
var $copy = $(this);
$copy.html(""); // refer to the variable, you've just selected it
};
在您当前的代码中,变量副本是全局的(文档范围)。如果一个函数更改了该值,则所有其他函数将使用相同的值,就像您在函数外部定义它一样。
Offtopic:
我冒昧地将copy
重命名为$copy
,这是一个常见的用于将jquery对象定义为前缀为$
的变量,因此您可以区分它们。此外,您可能希望将其重命名为类似$elem
的内容,将声音复制为功能很多,这可能会让人感到困惑。