【发布时间】:2021-11-17 20:01:48
【问题描述】:
我有下一个 html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="css/main.css" />
<script src="js/main.js"></script>
</head>
<body>
<button type="button" class="btn btn-outline-warning"
onclick='debugger;lazy_load( $("#load") )'
>Primary</button>
<div id="load">
<div data-lazy-load="ajax/data-ajax.json">Loading...</div>
<div data-lazy-load="ajax/data-ajax.html">Loading...</div>
</div>
</body>
</html>
import { ajax_query } from "../common/ajax";
export function lazy_load( container ) {
container ||= $('#load');
...
}
webpack.config.js 有:
plugins: config.scripts.isUseJquery
? [
new webpack.ProvidePlugin({
jQuery: "jquery",
jquery: "jquery",
$: "jquery",
"window.jQuery": "jquery",
"window.jquery": "jquery",
"window.$": "jquery",
}),
]
: [],
};
当我打开这个页面时,我得到Uncaught ReferenceError: $ is not defined
靠近此代码lazy_load( $("#load") )。
当我删除参数$("#load") 时,lazy_load 中的相同代码可以正常工作。
即使脚本执行在debugger 处停止,我也可以在控制台上运行$("#load") 而不会出现任何错误!
为什么onclick='lazy_load( $("#load") )' 不起作用?
【问题讨论】:
-
当 jQuery 不存在/未链接到时,您通常会看到此内容。
-
@RobMoll:jQuery 已链接。您可以看到 $('#load') 在
lazy_load函数和控制台中运行良好。为什么jQuery没有链接到主页? -
你试过
console.log(jQuery);吗?可以吗?也许您的代码在 jQuery 之前加载? -
@PeterKrebs:它可以从
lazy_load内部获得,但不能从主页获得(请参阅更新的问题) -
我建议不要将
onclick与模块一起使用。这有点像将手动曲柄启动器连接到法拉利。相反,请使用addEventListener将事件侦听器附加到适当的范围。
标签: javascript jquery webpack