为什么我的jQuery函数仅打开一个链接,而不打开代码中列出的其他链接?

用户6555789

目前,我正在网站中实施脚本,以检查用户选中了哪些复选框,然后在用户单击提交后就下载了该文件。我遇到的问题是,无论单击了多少个复选框,都只会下载第一个文件,而没有其他文件下载。

这是我的代码:

// Global manual variables
var classic;
var racing;
var flexer;
// Global handbook variables
var classicEng;
var classicMulti;
var flexerEng;
var racerEng;

// Checkbox download function

jQuery(document).ready(function() {
    classic = jQuery('#edit-submitted-manuals-required-1');
    racing = jQuery('#edit-submitted-manuals-required-2');
    flexer = jQuery('#edit-submitted-manuals-required-3');
    classicEng = jQuery('#edit-submitted-handbooks-required-1');
    classicMulti = jQuery('#edit-submitted-handbooks-required-2');
    flexerEng = jQuery('#edit-submitted-handbooks-required-3');
    racerEng = jQuery('#edit-submitted-handbooks-required-4');

    jQuery('#edit-submit').click(function() {  
        if (classicEng.is(':checked') && classicMulti.is(':checked') && flexerEng.is(':checked') && racerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/racing-45-english.pdf', '_blank');

        } else if (classicEng.is(':checked') && classicMulti.is(':checked') && flexerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank');

        } else if (classicEng.is(':checked') && classicMulti.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');

        } else if (classicEng.is(':checked') && flexerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank');

        } else if (classicEng.is(':checked') && racerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/racing-45-english.pdf', '_blank');  

        } else if (classicMulti.is(':checked') && flexerEng.is(':checked') && racerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/racing-45-english.pdf', '_blank');  

        } else if (classicMulti.is(':checked') && flexerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank'); 

        } else if (classicEng.is(':checked') && racerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');
            window.open('/sites/default/files/manuals/racing-45-english.pdf', '_blank'); 

        } else if (flexerEng.is(':checked') && racerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank');
            window.open('/sites/default/files/manuals/racing-45-english.pdf', '_blank'); 

        } else if (classicEng.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-45-english.pdf', '_blank');

        } else if (classicMulti.is(":checked")) {
            window.open('/sites/default/files/manuals/classic-xl-45.pdf', '_blank');

        } else if (flexerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/flexer-45-english.pdf', '_blank');

        } else if (racerEng.is(':checked')) {
            window.open('/sites/default/files/manuals/racing-45-english.pdf', '_blank'); 

        } else if (classic.is(':checked') && racing.is(':checked') && flexer.is(':checked')) { 
            window.open('/sites/default/files/manuals/classic-xl-parts.pdf', '_blank');
            window.open('/sites/default/files/manuals/racing-45-parts.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-xl-parts.pdf', '_blank');

        } else if (classic.is(':checked') && flexer.is(":checked")) {
            window.open('/sites/default/files/manuals/classic-xl-parts.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-xl-parts.pdf', '_blank'); 

        } else if (classic.is(':checked') && racing.is(":checked")) {  
            window.open('/sites/default/files/manuals/classic-xl-parts.pdf', '_blank')
            window.open('/sites/default/files/manuals/racing-45-parts.pdf', '_blank');

        } else if (racing.is(':checked') && flexer.is(':checked')) {
            window.open('/sites/default/files/manuals/racing-45-parts.pdf', '_blank');
            window.open('/sites/default/files/manuals/flexer-xl-parts.pdf', '_blank');

        } else if (classic.is(':checked')) {
            window.open('/sites/default/files/manuals/classic-xl-parts.pdf', '_blank');

        } else if (racing.is(':checked')) {
            window.open('/sites/default/files/manuals/racing-45-parts.pdf', '_blank');

        } else if (flexer.is(':checked')) {
            window.open('/sites/default/files/manuals/flexer-xl-parts.pdf', '_blank');

        }  else {
            alert("Please choose a file to download");
        }
    });
});

如果有人在这里发现我在做什么错,将不胜感激!

马克·汤森

我认为问题是由页面完成加载之前声明的Manual和Handbook变量引起的。我建议在同一位置声明它们,但在中将jQuery(document).ready()更新,可以确保元素已呈现。

结果jQuery(document).ready(function(){});将如下所示:

    // Manual variables
    var classic;
    var racing;
    var flexer;

    // Handbook variables
    var classicEng;
    var classicMulti;
    var flexerEng;
    var racerEng;

    // Handbook download function
    jQuery(document).ready(function() {
            classic = jQuery('#edit-submitted-manuals-required-1');
            racing = jQuery('#edit-submitted-manuals-required-2');
            flexer = jQuery('#edit-submitted-manuals-required-3');

            // Handbook variables
            classicEng = jQuery('#edit-submitted-handbooks-required-1');
            classicMulti = jQuery('#edit-submitted-handbooks-required-2');
            flexerEng = jQuery('#edit-submitted-handbooks-required-3');
            racerEng = jQuery('#edit-submitted-handbooks-required-4');

        jQuery('#edit-submit').click(function() {  
            if (classicEng.is(':checked')) {
                window.open('/sites/default/files/manuals/file.pdf');
             } else if (classicMulti.is(":checked")) {
                window.open('/sites/default/files/manuals/file.pdf');
            } else if (flexerEng.is(":checked")) {
                window.open('/sites/default/files/manuals/file.pdf');
            } else if (racerEng.is(":checked")) {
                window.open('/sites/default/files/manuals/file.pdf');
            } else if (classic.is(':checked')) {
                window.open('/sites/default/files/manuals/file.pdf');        
            } else if (racing.is(":checked")) {        
                window.open('/sites/default/files/manuals/file.pdf');
            } else if (flexer.is(":checked")) {
                window.open('/sites/default/files/manuals/file.pdf');
            }  else {
                alert("Please choose a file to download");
            }
        });
    });

我们继续在外部声明jQuery(document).ready()但在内部进行更新的原因是,它们仍然是全局变量。如果我们在内部声明了jQuery(document).ready()它们,则对于外部的任何函数而言它们都将超出范围jQuery(document).ready()

为了回应您有关使它能够下载多个文件的后续评论,我建议使它将文件名推送到一个数组中。将它们推入数组后,可以使用for循环遍历它们,然后逐个触发您的调用。

再一次,如果您使用服务器端代码,则可以将这些单独的文件添加到一个zip文件中,以使用户使用起来更加轻松。对于非服务器端解决方案,jQuery / Javascript如下所示:

        jQuery('#edit-submit').click(function() {
            var myArray = []
            if (classicEng.is(':checked')) {
                myArray.push('/sites/default/files/manuals/file.pdf');
             }
             if (classicMulti.is(":checked")) {
                myArray.push('/sites/default/files/manuals/file.pdf');
            } 
             if (flexerEng.is(":checked")) {
                myArray.push('/sites/default/files/manuals/file.pdf');
            } 
             if (racerEng.is(":checked")) {
                myArray.push('/sites/default/files/manuals/file.pdf');
            } 
             if (classic.is(':checked')) {
                myArray.push('/sites/default/files/manuals/file.pdf');        
            }
             if (racing.is(":checked")) {        
                myArray.push('/sites/default/files/manuals/file.pdf');
            } 
             if (flexer.is(":checked")) {
                myArray.push('/sites/default/files/manuals/file.pdf');
            }  
             //Find out how many files the user has selected
             var totalFiles = myArray.length;
             //Throw an error if no boxes are checked
             if (totalFiles == 0) {
                alert("Please choose a file to download");
             } else {
                     for (var i = 0; i < totalFiles; i++) {
                           //Open a download window for each URL in the array
                           window.open(myArray[i]);
                     }
             }
            }
        });
    });

现在来简要解释一下新代码。首先,我声明了一个名为的数组myArray我将您的if/else语句更改为justif语句,并将push每个复选框的URL添加到数组中。

函数选中每个框并将URL添加到数组后,我将声明另一个名为的变量totalItems,该变量将检查推送到数组中的项目数。如果在数组中没有的项目,我扔alert那是在你的else声明之前。

如果阵列中项目,则for循环将分别遍历每个项目并打开每个项目的下载窗口。

希望对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用链接打开一个子窗口?

来自分类Dev

我想在Android的应用程序窗口中打开一个链接

来自分类Dev

来自其他站点的链接应打开该站点的第一个链接

来自分类Dev

如何创建一个可以打开带有相应参数的其他链接的链接?

来自分类Dev

来自其他站点的链接应打开该站点的第一个链接

来自分类Dev

在浏览器中从winforms gridview列中打开一个链接

来自分类Dev

如何在GridView中打开一个链接的弹出窗口

来自分类Dev

打开一个模式并将其链接到AngularJS中的指令

来自分类Dev

在 MVC 中的操作链接上打开一个弹出窗口

来自分类Dev

打开一个JQuery选项卡中另一个JQuery选项卡中存在的文档超链接?

来自分类Dev

解锁文件-为什么我需要打开一个新会话?

来自分类Dev

循环浏览页面上的链接并打开一个链接

来自分类Dev

像我使用MATLAB一样在Python Spyder中打开一个函数

来自分类Dev

像我使用MATLAB一样在Python Spyder中打开一个函数

来自分类Dev

为什么我的服务器不能正确链接到服务器上的仅一个文件,而对所有其他文件都可以?

来自分类Dev

如何打开一个UIWebView到另一个UIWebView的链接?

来自分类Dev

在我的CentOS中打开一个端口

来自分类Dev

为什么这个Bootstrap不会在打开一个部分的情况下将其他人折叠起来呢?

来自分类Dev

Fancybox iframe仅打开第一个链接

来自分类Dev

jQuery + Bootstrap Modal,在另一个内部打开一个模态...为什么?

来自分类Dev

当单击JavaFX中的超链接时,应在浏览器中打开一个相关的URL。

来自分类Dev

在其他标签中打开链接

来自分类Dev

Bootstrap Popover:通过2个不同的链接打开一个Popover

来自分类Dev

可以在codenameone应用程序中打开一个Facebook应用程序的链接吗?

来自分类Dev

为什么我不能再打开一个我一直在处理的目录作为 Linux 中的目录?

来自分类Dev

尝试从组中打开一个UISwitch,并在iOS中同时禁用其他UISwitch

来自分类Dev

尝试从组中打开一个UISwitch,并在iOS中同时禁用其他UISwitch

来自分类Dev

如果我在同一个程序中打开一个 FIFO 进行读写会发生什么?

来自分类Dev

单击链接按钮时打开一个新选项卡

Related 相关文章

  1. 1

    用链接打开一个子窗口?

  2. 2

    我想在Android的应用程序窗口中打开一个链接

  3. 3

    来自其他站点的链接应打开该站点的第一个链接

  4. 4

    如何创建一个可以打开带有相应参数的其他链接的链接?

  5. 5

    来自其他站点的链接应打开该站点的第一个链接

  6. 6

    在浏览器中从winforms gridview列中打开一个链接

  7. 7

    如何在GridView中打开一个链接的弹出窗口

  8. 8

    打开一个模式并将其链接到AngularJS中的指令

  9. 9

    在 MVC 中的操作链接上打开一个弹出窗口

  10. 10

    打开一个JQuery选项卡中另一个JQuery选项卡中存在的文档超链接?

  11. 11

    解锁文件-为什么我需要打开一个新会话?

  12. 12

    循环浏览页面上的链接并打开一个链接

  13. 13

    像我使用MATLAB一样在Python Spyder中打开一个函数

  14. 14

    像我使用MATLAB一样在Python Spyder中打开一个函数

  15. 15

    为什么我的服务器不能正确链接到服务器上的仅一个文件,而对所有其他文件都可以?

  16. 16

    如何打开一个UIWebView到另一个UIWebView的链接?

  17. 17

    在我的CentOS中打开一个端口

  18. 18

    为什么这个Bootstrap不会在打开一个部分的情况下将其他人折叠起来呢?

  19. 19

    Fancybox iframe仅打开第一个链接

  20. 20

    jQuery + Bootstrap Modal,在另一个内部打开一个模态...为什么?

  21. 21

    当单击JavaFX中的超链接时,应在浏览器中打开一个相关的URL。

  22. 22

    在其他标签中打开链接

  23. 23

    Bootstrap Popover:通过2个不同的链接打开一个Popover

  24. 24

    可以在codenameone应用程序中打开一个Facebook应用程序的链接吗?

  25. 25

    为什么我不能再打开一个我一直在处理的目录作为 Linux 中的目录?

  26. 26

    尝试从组中打开一个UISwitch,并在iOS中同时禁用其他UISwitch

  27. 27

    尝试从组中打开一个UISwitch,并在iOS中同时禁用其他UISwitch

  28. 28

    如果我在同一个程序中打开一个 FIFO 进行读写会发生什么?

  29. 29

    单击链接按钮时打开一个新选项卡

热门标签

归档