目前,我正在网站中实施脚本,以检查用户选中了哪些复选框,然后在用户单击提交后就下载了该文件。我遇到的问题是,无论单击了多少个复选框,都只会下载第一个文件,而没有其他文件下载。
这是我的代码:
// 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] 删除。
我来说两句