javascript - 用JS更改标题的简单功能
问题描述
我想编写简单的函数来更改文档的标题。
首先我尝试了这段代码:
<head>
<meta charset="utf-8">
<title>Zmeň mě!</title>
</head>
<body>
<input type="text" id="newTitle">
<button type="button" onclick="titleChange()">sub</button>
</body>
<script type="text/javascript">
var title, newTitle;
title = document.title;
newTitle = document.getElementById("newTitle").value;
function titleChange(newTitle) {
title = newTitle;
}
</script>
That didn't work so I was randomly changing it to this:
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Zmeň mě!</title>
</head>
<body>
<input type="text" id="newTitle">
<button type="button" onclick="titleChange()">sub</button>
</body>
<script type="text/javascript">
function titleChange(newTitle) {
document.title = document.getElementById("newTitle").value;
}
</script>
为什么第二个有效,而第一个无效? 非常感谢您的回答。
解决方案
为什么第二个有效,而第一个无效?
问题有两个部分:
- 您从哪里获得新价值。
- 您将值分配到的位置。
获取新值
在
function titleChange(newTitle) {
title = newTitle;
}
newTitle
您正在从参数中获取新值。但是查看调用点 ( onclick="titleChange()"
),您永远不会为参数传递值。
现在,在函数上方,您定义了一个具有相同名称的变量:
newTitle = document.getElementById("newTitle").value;
这没有任何影响,原因有两个:
该参数newTitle
会隐藏同名变量,因此永远不会读取该变量的值。
var foo = 42;
function bar(foo) {
console.log(foo);
}
bar(21); // logs 21, not 42
分配仅在页面加载时发生一次。此时输入字段还没有值。稍后对该字段的更改不会神奇地更新变量。
在您的第二个示例中,您正在读取事件处理程序中的输入字段值,即在执行处理程序时您正在获取当前输入值。
分配新值
JavaScript 是一种按值传递的语言。这基本上意味着,如果您将变量或对象属性的值分配给另一个变量,则会创建并分配该值的副本。新变量和“源变量”之间没有内在联系。因此分配给title
不会document.title
以任何方式影响。
这是一个简化的示例:
var foo = 42;
var bar = foo;
bar = 21;
console.log(foo); // still 42, assinging to 'bar' doesn't change 'foo'
document.title
如您的第二个示例所示,直接分配给可以按预期工作。
推荐阅读
- ios - 保存由结构对象数组组成的领域列表
- r - R Shiny Reactive dplyr 过滤器以形成新的数据框以进行绘图
- javascript - 将 JSON 响应的数据存储到多个变量中
- firebase - 如何以正确的方式从firebase存储中获取pdf文件Angular 5
- node.js - 是否可以使用 `JwtStrategy` 更改`JWT` 字符串?
- php - 未部署网站的 PHP 页面重定向
- r - R:如何正确地为 ggmap 地理编码/谷歌地理编码 API 准备一个国际地址?
- python - DJANGO:创建一个允许下载 zip 文件的按钮
- mysql - 如何在mysql中替换JSON键的值
- java - 在java中使用try和catch查找元素数组