jQuery 3.6按钮点击触发Uncaught TypeError错误求助
问题:jQuery点击按钮触发未定义属性读取错误
我有一个用jQuery实现客户端逻辑的应用,之前运行正常,但未修改代码的情况下,点击按钮时jQuery文件触发错误,且错误在执行到绑定的点击脚本前就已抛出。
按钮代码
<a id="lookup" href="#SummaryModal" type="button" data-toggle="modal" data-backdrop="static" class="btn btn-tertiary" title="Summary"> <span class="glyphicon glyphicon-list" aria-hidden="true"></span>Quick Summary </a>
绑定的脚本代码
$(document).on("click", "#lookup", function (e) { $.ajax({ url: "/Home/GetSummary/", type: 'POST', beforeSend: function (xhr) { xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); }, cache: true, async: true }).done(function (result) { $("#divSummary").html(result); }); })
错误信息
Uncaught TypeError: Cannot read properties of undefined (reading 'jQuery360059256788808060092') at Data.get (jquery.js:4301:9) at Data.access (jquery.js:4319:16) at Function.data (jquery.js:4459:19) at HTMLAnchorElement.delegate (jquery.validate.js:419:23) at HTMLFormElement.dispatch (jquery.js:5430:27) at elemData.handle (jquery.js:5234:28) at Object.trigger (jquery.js:8719:12) at Object.simulate (jquery.js:8788:16) at HTMLDocument.handler (jquery.js:8822:17) get @ jquery.js:4301 access @ jquery.js:4319 data @ jquery.js:4459 delegate @ jquery.validate.js:419 dispatch @ jquery.js:5430 elemData.handle @ jquery.js:5234 trigger @ jquery.js:8719 simulate @ jquery.js:8788 handler @ jquery.js:8822
已尝试的操作
- 更新了jQuery文件
- 确认jquery.validate 1.17与jQuery 3.6版本兼容,但错误仍存在
解决思路
- 检查重复引入jQuery:打开开发者工具的Network标签,搜索
jquery,确认页面只加载了一个版本的jQuery。多版本共存会导致内部数据缓存冲突,引发此类错误。 - 排查jquery.validate的绑定逻辑:错误栈指向
jquery.validate.js的delegate方法,说明表单验证的委托绑定出了问题。检查页面中表单验证的初始化代码,确保其在DOM完全加载后执行,且没有和按钮的事件逻辑冲突。 - 检查元素的jQuery数据缓存:错误是读取jQuery内部数据属性失败,可在按钮点击前执行
console.log($('#lookup').data())查看元素的jQuery数据;也可尝试先解绑所有相关事件再重新绑定:$(document).off('click', '#lookup').on('click', '#lookup', function(e) { // 原AJAX逻辑 }) - 排查模态框与事件的冲突:按钮同时触发Bootstrap模态框(
data-toggle="modal")和自定义AJAX事件,可能存在逻辑冲突。暂时移除data-toggle属性,测试错误是否消失,再逐步排查模态框和AJAX的交互问题。 - 强制清除浏览器缓存:即使未修改代码,浏览器可能缓存了旧脚本。按
Ctrl+F5强制刷新页面,或手动清除浏览器缓存后重新测试。 - 检查全局变量污染:其他脚本可能篡改了jQuery的原型或内部方法。在控制台执行
$.fn.data.toString(),对比正常环境下的输出,确认data方法未被修改。
内容的提问来源于stack exchange,提问作者TheFallenOne
相关产品推荐
相关产品推荐

