JavaScript-如何获取1个以上文件的文件ID属性?

时间:2019-03-07 08:09:54

标签: javascript

我有一个编写的简单JavaScript函数:

function fireGENURL(a){
    try{

        var selectedFiles = $('.fileCheck:checked');
        if(selectedFiles.length < 1 ){
            alert("Please select at least one file.");
            return false;
        }

        var fileID = $(selectedFiles[0]).attr('fileid');

      /*  var $fileChecks = $('.fileCheck:checked');
        $fileChecks.each(function() {
            var file = $(this).attr('fileid');
            alert(file+"has been selected");
        });
        var count = $fileChecks.length;*/



        $('body').pWin("open", {
            x: 260,
            y: 47,
            height: 450,
            width: 881,
            title: "Generate URL",
            skinMode:'dialog',
            iframe:true,
            url: "file/url/genurl.jsp",
            data: {

            nodeID:fileID

            },
            offResize:true,
            offMove:true,
            onTitle:false,
            offBottom:true
        });



    }catch(e)
    {
        alert(e);
    }


}

当我选中任何文件上的复选框并触发GENURL按钮时,将调用上面的函数。下面是我的屏幕截图:

Screenshot

它调用genurl.jsp来检索已选中复选框的fileID。

GENURL.JSP:

  <%

    //grabs the file id of each file
    long nodeID = Long.parseLong(request.getParameter("nodeID"));





        //need to input logic to populate data on each row
        int count = 0;

        List files = fileFacade.list_items(nodeID);
        for (Iterator rstltr = files.iterator(); rstltr.hasNext();) {
            Fmedia fv = (Fmedia) rstltr.next();
            Node nd = nodeFacade.get(fv.getNodeid(), false);
           // Fmedia fm = fileFacade.get_file(fv.getNodeid());


            count++;




    %>

        <tbody>
        <tr>
            <td width="5%">
    <!-- Checkbox   -->
                <input type="checkbox" name="name1" />&nbsp;
            </td>

            <td>

                <!-- No   -->

            </td>
            <td width="28%">

                <!-- Filename   -->
                <%=nd.getNodedesc()%>
            </td>


        </tr>

        </tbody>


    <%}
    %>

如您所见,nd.getNodedesc将返回文件名并填充我的jsp页表。

无论如何,如果我勾选了一个框并填充表格,它可以工作,但是如果多次勾选并填充表格,我如何使其检索多个文件ID?

我知道这一行var fileID = $(selectedFiles[0]).attr('fileid');仅检索一个文件ID,但我不知道如何获取多个文件以将其传递到JSP页面。

编辑

在我的JavaScript函数中,在注释掉的代码下,该代码段能够检索多个文件ID,但无法将值传递给data

function fireGENURL(a){
    try{

        var selectedFiles = $('.fileCheck:checked');
        if(selectedFiles.length < 1 ){
            alert("Please select at least one file.");
            return false;
        }

        cutFiles = new Object();

        var count = 0;
        for(var file in selectedItems){
            var fileID = file.substring(0);

            // post each selected fileID
            cutFiles['fileID' + count] = fileID;
            count += 1;
            alert(fileID +" has been selected");
        }




       // var fileID = $(selectedFiles[0]).attr('fileid');

      /*  var $fileChecks = $('.fileCheck:checked');
        $fileChecks.each(function() {
            var file = $(this).attr('fileid');
            alert(file+"has been selected");
        });
        var count = $fileChecks.length;*/



        $('body').pWin("open", {
            x: 260,
            y: 47,
            height: 450,
            width: 881,
            title: "Generate URL",
            skinMode:'dialog',
            iframe:true,
            url: "file/url/genurl.jsp",
            data: {

            nodeID:fileID

            },
            offResize:true,
            offMove:true,
            onTitle:false,
            offBottom:true
        });



    }catch(e)
    {
        alert(e);
    }


}

编辑4

 String[] split = request.getParameter("nodeID").split(",",0);
 for(int i=0;i<split.length;i++){

     long file=Long.parseLong(split[i]);

 }

1 个答案:

答案 0 :(得分:1)

您只能使用我知道的单个数据变量通过JS中的HTML GET传递数组的唯一方法是对其进行字符串化:

Schema::create('products', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
        $table->softDeletes();
        $table->string('code',45);
});

Schema::create('materials', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
        $table->softDeletes();
        $table->string('code',45);
});
Schema::create('product_material', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
        $table->softDeletes();
        $table->integer('product_id');
        $table->integer('material_id');
    });

这将发送一个字符串,可以使用以下命令将其解析为数组:

var selectedFiles = [];
$('.fileCheck:checked').each(function() { selectedFiles.push($(this).attr('fileid')); });
var stringArray = JSON.stringify(selectedFiles);

$('body').pWin("open", {
            x: 260,
            y: 47,
            height: 450,
            width: 881,
            title: "Generate URL",
            skinMode:'dialog',
            iframe:true,
            url: "file/url/genurl.jsp",
            data: {

            nodeID:stringArray 

            },
            offResize:true,
            offMove:true,
            onTitle:false,
            offBottom:true
        });

请参见Fiddle示例,它产生什么输出。

https://jsfiddle.net/h3Legzt6/1/

编辑:

有一些限制,例如: What is the maximum length of a URL in different browsers?

其他方法是使用本地存储:

JSON.parse(request.getParameter("nodeID"));

localStorage.setItem('IDs', JSON.stringify(selectedFiles));

根据浏览器的默认设置,这也有局限性,但仅限于更多的空间。不幸的是,由于用户可以配置localStorage可以占用多少空间,因此无法保证该空间。 What is the max size of localStorage values?

此外,要小心,因为多个选项卡可能会干扰此存储,并在存储名称中包含一些呼叫标识,每个选项卡名称都唯一是一个好主意,并向JSP提供该唯一ID,以便它能够找到它。

EDIT2:

要在您的代码中实现它,应该这样做:

JSON.parse(localStorage.getItem('IDs'));

编辑3:

根据注释,还可以生成由定界数字组成的字符串(例如:123,234),并将其在JSP中拆分,然后将其转换为Long in loop。

编辑4:

这只是一个尝试,语法可能是错误的,我认为您已经做到了。您将其拆分,循环通过并转换为Long,此long可以与其余代码一起使用:

function fireGENURL(a){
    try{

        var selectedFiles = $('.fileCheck:checked');
        if(selectedFiles.length < 1 ){
            alert("Please select at least one file.");
            return false;
        }

        var filesList = [];
        var $fileChecks = $('.fileCheck:checked');
        $fileChecks.each(function() {
            filesList.push($(this).attr('fileid'));
        });
        var count = $fileChecks.length;
        var stringArray = JSON.stringify(filesList);



        $('body').pWin("open", {
            x: 260,
            y: 47,
            height: 450,
            width: 881,
            title: "Generate URL",
            skinMode:'dialog',
            iframe:true,
            url: "file/url/genurl.jsp",
            data: {

            nodeID:stringArray

            },
            offResize:true,
            offMove:true,
            onTitle:false,
            offBottom:true
        });



    }catch(e)
    {
        alert(e);
    }


}