javascript — Установка множественного флажка и копирование данных

#javascript

#javascript

Вопрос:

Я не могу разобраться в этом и пытаюсь часами. У меня есть JSP, который выглядит следующим образом:

введите описание изображения здесь

Моя цель — установить выбранный флажок и нажать на copy selected url кнопку, и он должен иметь возможность копировать все уникальные URL по порядку. Затем я мог бы вставить его куда угодно, я хочу.

Это моя страница JSP:

 <table class="filesTbl">
    <tr>
        <th width="1%">
            Checkbox
        </th>
        <th width="1%">
             No
        </th>
        <th width="20%">
            File Name
        </th>
        <th width="50%">
            Unique URL
        </th>
        <th width="1%">
            Edit
        </th>
        <th width="1%">
            Copy
        </th>
        <th width="1%">
            Email
        </th>

    </tr>

<%
    //need to input logic to populate data on each row

    int counter=0;
    int tally=0;

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

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

        List files = fileFacade.list_items(file);
        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());



            int count = 0;
            count  ;
            long fileid= nd.getNodeid();

      SettingsFacadeLocal settingFacade = (SettingsFacadeLocal)ctx.lookup("java:comp/env/settings");
        String redirectURL = settingFacade.get("SERVER_URL").getAtval();
        //declare a timestamp for unique URL
        // String timeStamp=new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());
        // String hash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(timeStamp);

        SecureRandom secureRandom=new SecureRandom();
        byte[] token = new byte[12];
        secureRandom.nextBytes(token);
        String hash= new BigInteger(1, token).toString(12);





%>


    <tbody>
    <tr>
        <td width="5%">

            <script>

                function checkRow(element){
                    try {



                        var checked = $(element).is(':checked');
                        var rowCount = $(element).attr('rowcount');
                        var classRow = 'rowOut';

                        if(checked==true){
                           <%=nd.getNodeid()%>

                        }


                        if(rowCount % 2 == 1){
                            classRow = "rowOver";
                        }



                    }catch(err){
                        alert(err);
                    }
                }



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

                    var $fileChecks = $('.fileCheck:checked');
                    $fileChecks.each(function() {
                        alert(<%out.print(nd.getNodeid());%>);
                    });




                }
            </script>

            <!--Display Checkbox   -->
            <input type="checkbox" class="fileCheck" id="<%=tally=tally 1%>" onclick="checkRow(this)" />amp;nbsp;


        </td>

        <td>
            <!--Display No   -->
            <% counter=counter 1;
                out.print(counter);

            %>


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

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



        </td>
        <td width="100%">
            <!-- Display URL -->


            <%=redirectURL "/repository/file/view/viewPDF.jsp?f0=" nd.getNodeid() "amp;ts=" hash%>
            <%

                fileFacade.insert_url(nd.getNodeid(),"f0=" nd.getNodeid() "amp;ts=" hash);

                //fileFacade.insert_url(nd.getNodeid(),"{syscont url}/repository/file/view/viewPDF.jsp?{url});

            %>


        </td>
        <td>
            <!-- Display EDIT/DEL -->

        </td>
        <td> <!-- Display COPY feature -->

            <input type="button" value="Copy URL" onclick="copyURL('<%=redirectURL "/repository/file/view/viewPDF.jsp?f0=" nd.getNodeid() "amp;ts=" hash%>')">

        </td>


    </tr>

    </tbody>


<%}}
%>


    <script>
        function copyURL(url) {
            var copyText = url;
            var el = document.createElement('textarea');
            el.value = copyText;
            el.setAttribute('readonly', '');
            el.style = {
                position: 'absolute',
                left: '-9999px'
            };
            document.body.appendChild(el);
            el.select();
            document.execCommand('copy');
            document.body.removeChild(el);
            alert("You have copied the URL");
        }
    </script>





</table>




</div>

<!--Copy button to copy multiple links -->

<div class="wrapper">
<input type="button" value="Copy Selected URL" onclick="copymultiplelink()">
</div>
<style>


    .wrapper {
        position: absolute;
        top: 90%;
        left: 5%;
    }

</style>


</body>
  

Я написал функцию javascript copymultiplelink() , чтобы иметь возможность определять каждый URL, привязанный к каждому флажку, но, по-видимому, я мог захватить только один из файлов, но не более одного, если я проверил два.

Есть идеи, как я мог бы решить эту дилемму?

Я ценю это.

Редактировать:

Это мой способ:

   <script>




                function copymultiplelink() {

                    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).val());
                    });

                    alert("You have copied "   filesList.length  " URL");
                    copyURL(filesList);

                }
            </script>

            <!--Display Checkbox   -->
            <input type="checkbox" class="fileCheck" id="<%=tally=tally 1%>" value="<%=redirectURL "/repository/file/view/viewPDF.jsp?f0=" nd.getNodeid() "amp;ts=" hash%>"  />amp;nbsp;


        </td>
  

Ответ №1:

Вы могли бы сохранить массив отмеченных значений и соответствующим образом обновить его в checkRow функции. В вашей copymultiplelink функции вы можете выполнить итерацию по массиву и добавить redirectURI каждую запись в пустую строку и выполнить copyURL(<GENERATED STRING>)

Определите переменную с именем var checkedRowArray = [] . Измените свою checkRow функцию на

 function checkRow(element) {
  try {
    var checked = $(element).is(':checked');
    var rowCount = $(element).attr('rowcount');
    var classRow = 'rowOut';
    var nodeId = <%=nd.getNodeid()%>;
    if (checked == true) {
      checkedRowArray.push(nodeId);
    } else {
      checkedRowArray = checkedRowArray.filter(function(x) {
        x !== nodeId;
      })
    }

    if (rowCount % 2 == 1) {
      classRow = "rowOver";
    }
  } catch (err) {
    alert(err);
  }
}
  

checkedRowArray Переменная теперь содержит запись всех выбранных узлов.
copymultiplelink функция:

 function copymultiplelink () {
  var copiedURLs = '';
  for (var i in checkedRowArray) {
    var node = checkedRowArray[i];
    copiedURLs  = `${<GET THE REDIRECT URL FROM NODEID>}n`;
  }
  copyURL(copiedURLs);
}
  

Комментарии:

1. Как это выглядит, я не уверен, что вы имеете в виду.?

2. Пожалуйста, помогите, я не мог понять это в течение нескольких часов.

3. Я сделал это по-другому, хотите увидеть мой ответ? Я не использовал функцию checkrow

4. Единственная проблема с моим решением — всплывающее предупреждение о том, сколько раз я устанавливаю флажок

5. Да, у вас должен быть alert вызов где-то в функции, от которой вы можете избавиться, я думаю.