为什么我的jQuery函数只打开一个链接,而不是代码中列出的其他链接?
Why is my jQuery function only opening one link and not the others listed in the code?
我目前正在实现一个脚本到一个网站,我正在检查,看看哪些复选框的用户已经检查,然后一旦用户点击提交它下载说的文件。我遇到的问题是,无论点击多少个复选框,只有第一个文件下载,其他的都没有。
下面是我的代码:
// 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");
}
});
});
如果有人能指出我在这里做错了什么,那将是非常感激的! 因为您使用的是else if
。但是,如果你试图快速打开新窗口,大多数浏览器默认会阻止打开新窗口。
您正在使用if / else if
。你只需要使用if
语句。在第一个真正的if
或else if
语句之后,跳过所有else if
和else
语句,因此在if / else if / else
结构中只执行一个代码块。
我认为问题是由于在页面完成加载之前声明了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
语句更改为if
语句,push
(添加)每个复选框的URL到数组中。
函数检查完每个方框并将URL添加到数组后,我声明了另一个名为totalItems
的变量,该变量检查推入数组的项数。如果数组中没有项目,我抛出之前在else
语句中的alert
。
如果数组中有项,则for
循环分别遍历每个项并打开每个项的下载窗口。
我希望这对你有帮助!
- 带有ruby代码和javascript的链接
- Jquery在初始页面加载时选中复选框时显示链接的代码
- 用于更改链接文本的字体颜色的代码
- 点击超链接即可获得搜索引擎和javascript代码
- ajax代码工作时,使用javascript禁用html中的链接
- 链接适用于所有浏览器,除了 safari(php 代码)
- 修复Javascript代码以将文本中的所有Youtube链接转换为Youtube ID功能
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- 我如何完善这个Javascript代码,使其忽略图像中的链接
- 在PHP代码中单击链接javascript函数调用
- 使用JavaScript从网页复制HTML代码或图像链接
- 将视图链接到模型并将视图链接至控制器的代码位于何处
- 正在将javascript值附加到gridview超链接.为什么我的代码没有任何想法'不起作用
- 为什么首先单击文档空白处的任何位置启动代码,而不是单击超链接,以及为什么打开了太多选项卡
- 替换文本中的随机youtube链接以使用javascript嵌入代码
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 添加此JavaScript代码的链接
- jQuery/JavaScript代码如何将表导出为CSV文件而不考虑表's大小.看看@jsfiddle链接
- 取消链接代码以从服务器中删除文件的位置
- Phonegap隐藏后端URL链接代码