功能仅适用于最后一次通话

时间:2014-07-30 13:46:46

标签: javascript jquery

我在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中引用的一个问题,但我不知道如何解决它。谢谢你的帮助!

1 个答案:

答案 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的内容,将声音复制为功能很多,这可能会让人感到困惑。