修正JS代码实现输入姓名邮箱后下载OOEcertificate对应PDF证书
代码修复方案
原有代码存在3类问题导致功能失效,对应修复后可正常使用:
- 语法错误:JS函数末尾多了冗余的闭合花括号,且存在页面加载即触发的无意义弹窗,直接阻塞脚本运行
- 路径错误:代码中写的文件夹路径是小写
/ooecertificate,和实际的/OOEcertificate大小写不匹配,在Linux类服务器上会直接返回404 - 交互缺陷:原逻辑在输入框内容变化时实时修改下载链接,用户未输全内容时点击会触发无效下载,且单输入框要求用户自行拼接ID,容易输错
推荐实现(双输入框版本,出错率更低)
按照需求拆分「名」和「注册邮箱ID」两个输入框,点击下载时自动拼接文件名,增加空值校验,代码如下:
<div> <label>ENTER YOUR FIRST NAME(输入您的名):</label> <br> <input type="text" id="firstname" placeholder="e.g. SAMMY"> <br><br> <label>ENTER YOUR REGISTERED EMAIL ID(输入注册邮箱ID):</label> <br> <input type="text" id="email" placeholder="e.g. SAMMY.DIXIT@GMAIL.COM"> <br><br> <label> 证书命名规则:名+注册邮箱ID,对应上述示例的文件名为SAMMYSAMMY.DIXIT@GMAIL.COM.pdf,存放在OOEcertificate文件夹下 </label> <br><br> <a href="/OOEcertificate" id="download" download> <span>Download Certificate(下载证书)</span> </a> </div> <script> const downloadBtn = document.getElementById('download'); downloadBtn.addEventListener('click', function(e) { const firstname = document.getElementById('firstname').value.trim(); const email = document.getElementById('email').value.trim(); if (!firstname || !email) { e.preventDefault(); alert('请先完整输入名和注册邮箱ID'); return; } this.href = `/OOEcertificate/${firstname}${email}.pdf`; }) </script>
兼容原有交互的单输入框版本
如果需要保留原有让用户自行输入拼接后注册ID的逻辑,可直接使用以下修复后的代码:
<div> <label>ENTER YOUR REGISTRATION ID(输入注册ID):</label> <br><br> <label> (注册ID规则:名+注册邮箱ID,例:名是SAMMY DIXIT、注册邮箱为SAMMY.DIXIT@GMAIL.COM时,注册ID为SAMMYSAMMY.DIXIT@GMAIL.COM) </label> <br> <input type="text" id="regId"> <br><br> <a href="/OOEcertificate" id="download" download><span>Download(下载)</span></a> </div> <script> const downloadBtn = document.getElementById('download'); downloadBtn.addEventListener('click', function(e) { const regId = document.getElementById('regId').value.trim(); if (!regId) { e.preventDefault(); alert('请输入注册ID'); return; } this.href = `/OOEcertificate/${regId}.pdf`; }) </script>
部署注意:请确认服务器端OOEcertificate文件夹已开放静态资源访问权限,所有PDF文件名严格遵循「名+邮箱ID.pdf」的命名规则,注意大小写、特殊字符完全匹配,否则会出现下载404问题。
内容的提问来源于stack exchange,提问作者rajiv
相关产品推荐
相关产品推荐

