You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress Give插件文件上传JS change事件仅首次生效求助

Issue: File Upload Validation JS Fails After Switching Payment Methods in GiveWP

我最近在给WordPress的Give筹款插件集成文件上传功能时,碰到了一个挺头疼的问题——我写的文件大小和类型校验JS代码,只在页面第一次加载时管用,切换支付方式后就彻底失效了。

具体场景

  • 页面刚加载完成后,上传大于500KB或者非.jpg/.pdf格式的文件,文件上传区域下方会正常弹出错误提示
  • 但切换到「银行转账捐赠」选项后,表单会自动更新:文件上传区域前新增了提示文本,同时表单字段被清空。这时候再上传不符合要求的文件,错误提示完全不出现,我加的alert("QUI")都没触发,明显JS的change事件没绑定到新的元素上

我最初写的代码

文件上传区域的HTML:

<div class="file-uploader"> 
  <input id="fileToUpload" name="fileToUpload" type="file" accept=".pdf,.jpg"/> 
  <label for="file-upload" class="custom-file-upload"> 
    <i class="fas fa-cloud-upload-alt"></i>Clicca per scegliere il file 
    <span name="filenamecheck" id="filenamecheck">test</span> 
  </label> 
  <p id="error" style="color: #c00000"></p> 
</div>

校验用的JavaScript:

<script> 
var inputElement = document.getElementById("fileToUpload") 
inputElement.addEventListener('change', function(){ 
  alert("QUI"); 
  var error = 0; 
  var fileLimit = 500; // In kb 
  var files = inputElement.files; 
  var fileSize = files[0].size; 
  var fileSizeInKB = (fileSize/1024); // Convert bytes to kilobytes 
  var fileName = inputElement.value; 
  idxDot = fileName.lastIndexOf(".") + 1; 
  extFile = fileName.substr(idxDot, fileName.length).toLowerCase(); 
  
  // Reset error messages and filename display
  document.getElementById("error").innerHTML = ""; 
  document.getElementById("filenamecheck").innerHTML = inputElement.value; 

  // Validate file type
  if (extFile !== "jpg" && extFile !== "pdf"){ 
    error = 1; 
    document.getElementById("error").innerHTML = "Solo file .pdf o .jpg"; 
    document.getElementById("fileToUpload").value = ""; 
  } 

  // Validate file size if type is okay
  if (error === 0) { 
    if(fileSizeInKB >= fileLimit) { 
      document.getElementById("error").innerHTML = "Massima grandezza file: " + fileLimit + "KB"; 
      document.getElementById("fileToUpload").value = ""; 
    } 
  } 
}) 
</script>

解决方案

折腾了半天终于找到问题所在!原来我一开始把这段JS代码放在了表单标签的外面,当切换支付方式导致表单刷新时,这段代码不会被重新执行,新生成的#fileToUpload元素自然没有绑定change事件。

解决方法是改用WordPress的钩子(在主题的functions.php文件中配置),把JS代码插入到表单内的<input>标签之后。这样每次表单刷新时,JS代码都会被重新加载,事件也能正确绑定到新的文件上传元素上,问题彻底解决了。

内容的提问来源于stack exchange,提问作者SirLancillotto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:47:30