
该错误通常因 jQuery 的 $ 符号未在作用域内定义导致,尤其在 WordPress 或 Elementor 等启用 NoConflict 模式的环境中常见;通过将 jQuery 显式传入 document.ready() 回调函数并作为参数接收,即可安全使用 $。
该错误通常因 jquery 的 `$` 符号未在作用域内定义导致,尤其在 wordpress 或 elementor 等启用 noconflict 模式的环境中常见;通过将 `jquery` 显式传入 `document.ready()` 回调函数并作为参数接收,即可安全使用 `$`。
在 WordPress 主题(尤其是搭配 Elementor 使用时),jQuery 默认以 NoConflict 模式加载,这意味着全局 $ 变量被释放,仅保留 jQuery 对象。因此,直接使用 $('#ipopup') 会报错 Uncaught TypeError: $ is not a function —— 因为此时 $ 并未指向 jQuery。
✅ 正确写法是将 jQuery 作为参数传入 document.ready() 回调函数,并在函数签名中用 $ 接收:
<script>
jQuery(document).ready(function($) {
// ✅ 此处 $ 是 jQuery 的安全别名,可放心使用
$('#ipopup').on('click', function() {
if (window.elementorProFrontend?.modules?.popup?.showPopup) {
window.elementorProFrontend.modules.popup.showPopup({ id: 16625 });
} else {
console.warn('Elementor Pro Popup module not loaded yet.');
}
});
});
</script>
? 关键说明:
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
-
jQuery(document).ready(function($){ ... })是标准的「安全封装」写法,确保$在函数内部始终有效; - 不要写成
$(document).ready(...)—— 这在 NoConflict 下会失败; - 建议添加存在性检查(如
window.elementorProFrontend?.modules?.popup?.showPopup),避免因插件脚本未就绪导致运行时错误; - 若需全局使用
$(不推荐),可手动执行jQuery.noConflict(false),但这可能与其他插件冲突,应避免。
? 额外提示:
Elementor Pro 的 popup 模块依赖前端 JS 资源异步加载,若点击触发过早(例如 DOM 就绪但 popup 模块尚未初始化),建议结合 elementorFrontend.hooks.addAction('frontend/loaded', ...) 确保模块完全可用:
jQuery(document).ready(function($) {
$('#ipopup').on('click', function(e) {
e.preventDefault();
// 确保 Elementor Pro Popup 已加载
if (window.elementorProFrontend?.modules?.popup?.showPopup) {
window.elementorProFrontend.modules.popup.showPopup({ id: 16625 });
} else {
// 延迟重试或监听加载完成钩子
elementorFrontend.hooks.addAction('frontend/loaded', function() {
window.elementorProFrontend.modules.popup.showPopup({ id: 16625 });
});
}
});
});
遵循此模式,即可彻底规避 $ is not a function 错误,同时保障代码在 Elementor 环境中的健壮性与兼容性。










