Javascript document.getElementById不使用Web包
我一直在尝试用Webpack实现基本Javascript,但在尝试使用基本方法时发现了很多问题。我知道在DOM之前加载js可能有问题,但我对这个问题的所有修复都是徒劳的 例如,我试图运行Javascript document.getElementById不使用Web包,javascript,webpack,Javascript,Webpack,我一直在尝试用Webpack实现基本Javascript,但在尝试使用基本方法时发现了很多问题。我知道在DOM之前加载js可能有问题,但我对这个问题的所有修复都是徒劳的 例如,我试图运行let taskinput=document.getElementById('new-task')
let taskinput=document.getElementById('new-task')当我在控制台中搜索taskinput变量时,我得到一个返回值未捕获引用错误:taskinput未定义(…)
我尝试了很多不同的解决方案,以使这段代码在DOM加载后运行,但似乎没有任何效果
我尝试了将javascript文件放在DOM底部的基本尝试
我尝试了一种基本的js方法,如下所示:
document.onreadystatechange = function() {
if (document.readyState === "complete") {
initApplication();
}
function initApplication() {(... placed code in here ...)}
我尝试过使用jQuery
$( document ).ready(function() { });
我已经尝试使用HTML网页包插件将javascript文件注入HTML
我的网页包有什么遗漏吗
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sample Site</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>
<button id="new-task">click</button>
<script src="/assets/app.bundle.js"></script>
</body>
</html>
使用浏览器控制台,您只能访问全局声明的变量,如果在函数中定义JavaScript变量,它不会成为全局变量。另外,使用声明的变量永远不要成为全局变量
如果要全局声明变量,可以将其设置为窗口的属性,例如:
window.taskinput = document.getElementById('new-task');
这可能有助于调试,但避免在生产代码中进行调试,因为使用全局变量被认为是一种不好的做法
例如,我试图运行let taskinput=document.getElementById('new-task');当我在控制台中搜索taskinput变量时,我得到了uncaughtreferenceerror的返回:taskinput未定义(…)
首先,webpack捆绑包中的模块代码在其自己的作用域中运行,有效地在闭包中运行,而不是在全局作用域中运行(您可以通过窗口
访问全局作用域)。其次,即使您转到控制台并使用let
声明变量,例如let a=1
,即使您的控制台在全局(窗口
)范围内运行,如果您尝试执行window.a
操作,您将得到未定义的,因为让变量不附加到窗口
范围。看
我的网页包有什么遗漏吗
可能是因为您的bundle中由webpack生成的代码不在全局范围内运行,如上所述
如果要将变量公开到全局范围,以便能够在控制台中出于调试目的使用它,请将其声明为window.variableName
。或者,您可以在代码中添加断点,方法是在要签出的变量之后添加调试器
,而不将其暴露于全局范围。谢谢!我现在要尝试一下,但在使用onclick命令启动时也遇到了问题。虽然我想这可能是源于同一个问题。好吧,那么我应该如何与DOM有效沟通呢?在使用webpack时,是否必须使用HTML模板语言或使用javascript生成所有页面HTML?“好的,那么我应该如何与DOM进行有效通信?”通常,您希望将供应商代码,例如jQuery
,放在页面的头部,因为它很可能不依赖于DOM状态,还有您自己的代码,它可能与body标记底部的DOM交互。也许我不明白你到底在问什么,在这种情况下,你能提供一个例子吗?我的意思是说,老实说,我只是想用javascript在点击时创建一个简单的警报框。我正在努力学习更多关于javascript语言的知识,而不必像其他库那样喋喋不休。但是,让我给出一些示例代码来向您展示我正在尝试做什么。除此之外,您的实际问题是,当您执行taskInput.onclick=alert('hey')代码>您将立即调用分配右侧的警报
功能。因此,alert
执行一次,它在赋值中返回undefined
,就这样。最后得到的结果是taskInput.onclick===undefined
。改为这样分配:taskInput.onclick=function(){alert('hey');}
。这样,您就可以在onclick
属性上为函数指定一个引用,而不是立即执行它。如果这是您的问题,您可以检查变量。您不必将它们暴露在窗口中
,就可以检查它们。正如我告诉您的,您可以向代码中添加断点,方法是在要检查的代码部分后添加语句,或者在浏览器控制台中添加断点。有关如何执行此操作的说明,请参阅
window.taskinput = document.getElementById('new-task');