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

签名板校验为空时报错:Uncaught ReferenceError: signaturePad is not defined

解决 Uncaught ReferenceError: signaturePad is not defined 问题

Hey there, let's break down why you're hitting this error and fix it step by step.

问题根源:变量作用域限制

你在jQuery(document).ready()函数内部用var声明了signaturePad,这意味着这个变量只在ready函数的局部作用域内有效。而你的全局submit()函数尝试访问它时,根本找不到这个变量,所以抛出了引用错误。

解决方案1:提升变量到全局作用域

最简单的修改是把signaturePad的声明移到ready函数外面,让它成为全局变量:

// 在全局作用域提前声明变量
var signaturePad;

jQuery(document).ready(function () { 
  var signaturePadCanvas = document.querySelector('#signature-pad-canvas'); 
  var parentWidth = jQuery(signaturePadCanvas).parent().outerWidth(); 
  signaturePadCanvas.setAttribute("width", parentWidth); 
  // 直接赋值给全局变量,不再用var
  signaturePad = new SignaturePad(signaturePadCanvas); 
}); 

function submit() { 
  // 现在能正常访问全局的signaturePad了
  if (signaturePad.isEmpty()) { 
    console.log("Empty!");
    // 替换成你的空校验提示逻辑,比如:
    alert("请先完成签名再提交!");
  }
}

解决方案2:使用事件绑定(更推荐)

全局函数和全局变量容易导致代码冲突,更规范的做法是在ready函数内部直接绑定按钮的点击事件,这样可以直接访问局部的signaturePad变量:

修改后的JavaScript代码:

jQuery(document).ready(function () { 
  var signaturePadCanvas = document.querySelector('#signature-pad-canvas'); 
  var parentWidth = jQuery(signaturePadCanvas).parent().outerWidth(); 
  signaturePadCanvas.setAttribute("width", parentWidth); 
  var signaturePad = new SignaturePad(signaturePadCanvas); 

  // 直接在局部作用域绑定按钮点击事件
  jQuery('button').on('click', function() {
    if (signaturePad.isEmpty()) { 
      console.log("Empty!");
      alert("请先完成签名再提交!");
    } else {
      // 签名有效时的提交逻辑
      console.log("签名已完成,准备提交");
      // 这里可以添加表单提交或其他处理
    }
  });
}); 

修改后的HTML代码(移除全局onClick):

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<script src="https://cdn.jsdelivr.net/npm/signature_pad@2.3.2/dist/signature_pad.min.js"></script> 
<div class="signature-pad-canvas-wrapper"> 
  <canvas id="signature-pad-canvas"></canvas> 
  <button>Submit</button> 
</div>

额外检查

如果修改后还是有问题,先确认:

  • SignaturePad库是否成功加载(打开浏览器控制台,查看Network标签,确保没有404错误)
  • canvas元素的ID是否和JS中的选择器一致(#signature-pad-canvas)

内容的提问来源于stack exchange,提问作者Mr. Jo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:58:07