第 二 部 分: HTML 页

JavaScript 结 构

JavaScript 把 所 有 的 元 素 安 排 在 一 个 web 页 结 构 中。 每 一 个 元 素 都 是 一 个 对 象。 每 一 个 对 象 都 可 以 有 特 定 的 方 法 和 特 性。 利 用 JavaScript 你 可 以 很 容 易 的 操 作 对 象。 因 此 理 解 HTML 的 对 象 就 变 的 非 常 重 要。 下 面 的 例 子 可 以 使 你 很 快 的 理 解 它。 下 面 的 代 码 展 现 的 是 一 个 简 单 的 HTML 页。


<html>
<head>
<title>My homepage
</head>
<body bgcolor=#ffffff>

<center>
<img src="home.gif" name="pic1" width=200 height=100>
</center>

<p>

<form name="myForm">
Name:
<input type="text" name="name" value=""><br>
e-Mail:
<input type="text" name="email" value=""><br><br>
<input type="button" value="Push me" name="myButton" onClick="alert('Yo')">
</form>

<p>
<center>
<img src="ruler.gif" name="pic4" width=300 height=15>
<p>

<a href="http://rummelplatz.uni-mannheim.de/~skoch/">My homepage</a>
</center>

</body>
</html>

 

我 们 有 两 个 图, 一 个 连 接 和 一 个 有 两 个 文 本 输 入 框, 一 个 按 钮 的 表。 如 果 从 JavaScript 的 观 点 来 看 这 个 浏 览 器 窗 口, 那 它 是 一 个 窗 口 对 象。 这 个 窗 口 对 象 包 含 了 一 些 特 定 的 元 素, 象 状 态 条。 在 这 样 一 个 窗 口 中 我 们 能 加 载 HTML 文 本 ( 或 者 其 它 格 式 的 文 件 - 在 这 儿 我 们 只 讨 论 HTML 文 本 )。 这 一 页 是 一 个 文 本 对 象。 在 这 儿 这 个 文 本 对 象 表 现 了 它 加 载 的 HTML 文 本。 在 JavaScript 中, 文 本 对 象 是 一 个 非 常 重 要 的 对 象, 你 会 在 以 后 经 常 用 到 它。 举 例 来 说, 背 景 色 是 文 本 对 象 的 一 种 特 性。 但 更 重 要 的 是, 所 有 的 HTML 对 象 都 是 文 本 对 象 的 特 性。 一 个 HTML 对 象 是 一 个 连 接, 一 张 表, 或 这 一 类 的 东 西。

我 们 想 要 知 道 关 于 不 同 对 象 及 如 何 操 作 它 们 的 话, 首 先 要 知 道 如 何 存 取 它 们。 你 能 从 上 面 这 个 结 构 图 中 看 到 对 象 的 名 字。 如 果 你 想 知 道 如 何 在 这 个 HTML 页 中 使 用 第 一 个 图 的 话, 你 必 须 先 看 看 这 个 结 构 图。 你 必 须 从 顶 层 开 始。 第 一 个 对 象 是 文 本。 这 页 上 第 一 个 图 是 通 过images[0] 来 表 现 的。这 意 味 着 我 们 能 通 过 JavaScript 对 象 document.images[0] 来 使 用 它。
如 果 你 想 知 道 用 户 在 第 一 个 文 本 输 入 框 输 入 了 什 么 的 话, 你 首 先 要 知 道 如 何 使 用 这 个 对 象。 我 们 再 次 从 结 构 图 的 顶 层 开 始。 顺 着 路 径 到 那 个 叫 elements[0] 的 对 象, 把 你 经 过 的 所 有 对 象 的 名 字 放 在 一 起。 这 意 味 着 你 能 通 过 document.forms[0].elements[0] 来 使 用 第 一 个 文 本 元 素。
不 过 目 前 我 们 如 何 知 道 用 户 输 入 的 是 什 么 呢? 为 了 知 道 一 个 对 象 的 特 性 和 方 法 你 必 须 阅 读 专 门 的 JavaScript 索 引 ( 比 如 是 Netscape 的 文 档 )。 从 那 儿 你 能 了 解 到 文 本 元 素 的 性 质 值。 这 就 是 用 户 输 入 到 文 本 元 素 中 东 西。 我 们 能 通 过 下 面 的 代 码 来 取 得 它 的 值:


name= document.forms[0].elements[0].value;

字 符 串 被 储 存 在 变 量 name 中。 现 在 我 们 能 操 作 这 个 变 量。 比 如 我 们 能 生 成 通 过alert("Hi " + name)一 个 弹 出 窗 口。 如 果 输 入 的 是 'Stefan', 那 么 命 令alert("Hi " + name) 会 生 成 一 个 内 容 是 'Hi Stefan' 的 弹 出 窗 口。
如 果 你 有 一 个 大 型 的 页, 那 么 只 通 过 不 同 的 数 字 编 号 辨 认 不 同 的 对 象 会 很 困 难, 就 象 document.forms[3].elements[17] 或 者 用 document.forms[2].elements[18]? 为 了 避 免 这 个 问 题, 你 可 以 给 不 同 的 对 象 赋 以 不 同 的 名 字。 你 能 从 下 面 的 例 子 中 看 到 我 们 是 怎 么 作 的:


<form name="myForm">
Name:
<input type="text" name="name" value=""><br>
...

这 就 是 说 forms[0] 也 能 叫 作 myForm。 你 能 通 过 使 用 name 来 代 替 elements[0] ( 在 <input 标 记 中 指 定)。 所 以 可 以 用


name= document.myForm.name.value;

来 代 替


name= document.forms[0].elements[0].value;

这 会 使 你 编 写 大 型 的 web 页 更 容 易。 ( 请 记 住, 大 小 写 是 不 同 的, 这 就 是 说 你 不 能 用 myform 来 代 替 myForm)
你 并 不 是 只 能 对 JavaScript 对 象 进 行“ 读 ” 的 操 作 的。 你 还 能 给 它 指 定 新 的 值。 举 例 来 说 你 能 在 文 本 输 入 框 中 输 入 一 个 新 的 值。 先 来 看 看 这 个 例 子:

这 儿 是 这 个 例 子 的 源 代 码, 有 趣 的 部 分 是 在 第 二 个 <input tag 后 的 onClick 属 性 定 义 中:


<form name="myForm">
<input type="text" name="input" value="bla bla bla">
<input type="button" value="Write"
  onClick="document.myForm.input.value= 'Yo!'; ">

在 这 儿 我 不 能 讲 的 很 清 楚, 如 果 你 能 查 阅 专 门 的 JavaScript 索 引 的 话, 那 儿 的 描 述 是 非 常 清 晰 的。 我 写 了 一 个 小 例 子, 在 这 个 例 子 中 你 能 看 到 不 同 对 象 的 应 用。 试 试 通 过 Netscape 的 文 档 的 帮 助 来 弄 懂 它
先 来 看 看 这 个 例 子 究 竟 是 怎 么 回 事:

这 儿 是 源 代 码:


<html>
<head>
<title>Objects</title>

<script language="JavaScript">
<!-- hide

function first() {

  // creates a popup window with the
  // text which was entered into the text element

  alert("The value of the textelement is: " +
    document.myForm.myText.value);
}

function second() {

  // this function checks the state of the checkbox

  var myString= "The checkbox is ";

  // is checkbox checked or not?
  if (document.myForm.myCheckbox.checked) myString+= "checked"
    else myString+= "not checked";

  // output string
  alert(myString);
}

// -->
</script>
</head>
<body bgcolor=lightblue>

<form name="myForm">
<input type="text" name="myText" value="bla bla bla">
<input type="button" name="button1" value="Button 1"
  onClick="first()">
<br>
<input type="checkbox" name="myCheckbox" CHECKED>
<input type="button" name="button2" value="Button 2"
  onClick="second()">
</form>

<p><br><br>

<script language="JavaScript">
<!-- hide

document.write("The background color is: ");
document.write(document.bgColor + "<br>");

document.write("The text on the second button is: ");
document.write(document.myForm.button2.value);

// -->
</script>

</body>
</html>

位 置 对 象

除 了 窗 口 对 象 和 文 本 对 象 以 外 还 有 一 个 很 重 要 的 对 象, 那 就 是 位 置 对 象。 这 个 对 象 是 用 来 定 位 一 个 可 载 入 的 HTML 文 本 的。 所 以 如 果 你 要 载 入 一 个 页 http://www.xyz.com/page.html 那 么 location.href 就 是 用 来 定 位 它 的 位 置 对 象。
更 重 要 的 是 你 能 给 location.href 指 定 新 的 值。 这 个 按 钮 载 入 了 一 个 新 的 页: