首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在.js中加载<head>文件

在.js中加载<head>文件
EN

Stack Overflow用户
提问于 2014-06-01 06:50:06
回答 2查看 104关注 0票数 0

所以我对javascript很陌生(事实上,我一般都是编程新手)。

我的问题是,我可以考虑将.js文件加载到

代码语言:javascript
运行
复制
<head><script src="script.js"></script>...</head>

作为加载头文件(如在c/c++中)?

我想不是。假设我的script.js如下所示:

代码语言:javascript
运行
复制
function copyToClipboard(text) 
{window.prompt("Copy to clipboard: Ctrl+C, Enter", text);}

我的index.html看起来是这样的:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
<head>
<script src="script.js"></script>
</head>
<body>
<textarea id="a" autofocus="true"></textarea>
<script> onclick=copyToClipboard(document.getElementById("a").value);
</script>
</body>
</html>

它不工作,即它不等待我的点击(这意味着函数加载正确-它被成功地调用,它只是弹出不等待鼠标事件)。但如果我把剧本放进去,它就能用:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<textarea id="a" autofocus="true"></textarea>
<script>onclick=function copyToClipboard(text) {
  window.prompt("Copy to clipboard:Ctrl+C,Enter",document.getElementById("a").value);
}
</script>
</body>
</html>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-01 07:01:34

第一段代码不能工作的原因是您正在调用copyToClipboard()函数并将返回值分配给onclick变量。在第二段代码中,您将正确地为它分配一个函数引用,而不是立即调用该函数。

换言之:

代码语言:javascript
运行
复制
onclick = copyToClipboard(document.getElementById("a").value);

“调用copyToClipboard(),将返回值(undefined)赋给onclick变量”

代码语言:javascript
运行
复制
onclick = function copyToClipboard(text) { ...

“将一个名为copyToClipboard()的函数的引用赋给onclick变量”

要使它与外部脚本中的函数定义一起工作,请将函数调用包装在一个匿名函数中:

代码语言:javascript
运行
复制
onclick = function() {
    copyToClipboard(document.getElementById("a").value);
};
票数 3
EN

Stack Overflow用户

发布于 2014-06-01 07:05:33

所有的人都称赞javascript误导开发人员错误诊断他们的问题的能力!

这不是定义内联onclick处理程序的方法。内联onclick处理程序是html元素的一个属性(或属性,我们将在以下几个部分中找到):

代码语言:javascript
运行
复制
<textarea id="a" autofocus="true" onclick="copyToClipboard(this.textContent)"></textarea>

您对<script>标记所做的只是包含一些javascript代码,以便在浏览器解析您的html时执行:

<script> onclick=copyToClipboard(document.getElementById("a").value);</script>调用您的函数,并将其返回值分配给onclick

但是等等,为什么你的第二个片段起作用了?

这是因为onclick也是dom元素的属性。还可以将单击处理程序分配给window本身--这就是第二个代码段实际上正在做的事情(由于javascript的一个不酷的特性,它试图将未定义的变量赋值给全局对象的属性)。这意味着,无论在哪里单击,都将调用新的单击处理程序。

至于你的开场白,你不能说标签是包含的--一个脚本可以包含的不仅仅是声明和定义,不像包含的文件。您可以查看一些模块标准/框架,如RequireJS,以获得更类似的功能。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23977436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档