0

我正在尝试使用单击事件浏览我的音乐目录 - 我可以让原始列表视图显示正常,单击事件将向下钻取到下一个目录,但在第三次单击时,我的索引位置不断返回原始目录条目对象的完整路径。

JS

    function readerSuccess(entries) {
    $("#test").empty();
    for (i=0;i<entries.length;i++){


    $("#test").append("<li>"+entries[i].name+"</li>");


    }

    $("#test").listview("refresh");


    ListClickHandler(entries);
    }






var ListClickHandler = function(something){
    $(document).on("click","#test li",function(event){
    var mylistname = $(this).text();

    var index = $("#test li").index(this);

    var listpath = something[index].fullPath; //this is causing the problem. entries never changes.
    alert(index);

        if(something[index].isFile ===true)
            {
            $("#test").empty();
            alert("this is a file");
            }

            else if(something[index].isDirectory===true)
            {

            var directoryentry = new DirectoryEntry(mylistname,listpath);
            var directoryreader = directoryentry.createReader();
            directoryreader.readEntries(readerSuccess,fail);
            //alert("this is a directory"+mylistname+listpath);
            }


    });
}
4

1 回答 1

0

我设法使用以下代码使其工作。我确定它有点混乱,但如果他们在同一个问题上遇到困难,希望能帮助他们。基本上,这将从读取我的音乐根文件夹中的第一个目录开始,然后当单击每个列表目录项时,它将刷新子目录、文件等。

我不得不将 $(document),on("click" .....) 移动到 readerSuccess 函数中,以便在触发列表单击事件时拾取正确的列表条目。我还添加了两个新数组来包含 entries.name 和 entries.fullPath,它们在每次迭代时都会被清空并重新填充正确的数据。下面的代码是我如何让它工作的,但我确信那里有更好的方法。我绝望地用谷歌搜索后找不到任何东西。

function readerSuccess(entries) {
    $("#test").empty();
    var listnames = new Array();
    var listpositions = new Array();

    for (i=0;i<entries.length;i++){
    if (entries[i].isDirectory===true)
    {
    alert("this is a directory");
    }
    if (entries[i].isFile===true){
    alert("this is a file")
    }

    $("#test").append("<li>"+entries[i].name+"</li>");

    listnames.push(entries[i].name);
    listpositions.push(entries[i].fullPath);

    }

    $("#test").listview("refresh");
        $(document).on("click","#test li",function(event){
    var mylistname = $(this).text();
    //alert(mylistname);
    var index = $("#test li").index(this);
    //alert(index);
    var listpath = listpositions[index];
    //alert(listpath);
    listnames.length=0;     //resets the array so new data appends with correct pos
    listpositions.length=0; //resets the array so new data appends with correct pos
    var directoryentry= new DirectoryEntry(mylistname,listpath);
    var directoryreader = directoryentry.createReader();

    directoryreader.readEntries(readerSuccess,fail);


    });
于 2013-07-30T10:39:15.417 回答