范 例 5:
在 这 一 部 分 首 先 要 为 你 展 示 的 JavaScript 特 性 是 将 你 的 滑 鼠 移 到 这 个 不 同 颜 色
的连 结上 面, 此 时 看 看 浏 览 器 下 的 状 态 列 有 何 结 果。 然 後 这 样 的 功 能 我 们 可 以
与 JavaScript 的 功 能 相 结 合。 好, 现 在 再 将 你 的 滑 鼠 移 到 本 处 不 同 颜 色 的连 结上
面, 你 应 该 会 发 现 有 一 个 视 窗 出 现, 是 吧?! 如 何! 怎 麽 做 到 的 呢? 以 下 就 是
这 一 个 连 结 的 作 法:
<a href="tpage.htm" onMouseOver="window.status='Just another stupid link...'; return true">在 这 儿 你 只 要 在 传 统 <a> 的 标 签 中 加 入 onMouseOver 的 method, 就 可 达 成 你 要 的
效 果 了。 这 里 的 window.status 是 用 来 让 你 可 以 在 WWW 浏 览 器 的 状 态 列 上 显 示
一 些 讯 息 用 的。 在 语 法 中, 你 可 以 看 到 讯 息 部 分 是 用 ' 括 起 来 的 部 分, 而 非 以 " 括
起 来, 在 讯 息 部 分 结 束 之 後, 必 须 加 上 ; return true。
好 了, 利 用 以 上 的 特 性 可 以 很 简 单 的 完 成 第 二 个 连 结 的 例 子! 相 当 简 单, 以
onMouseOver 的 method 然 後 配 合 事 件 发 生 时 去 呼 叫 函 数 hello() 就 行 了, 不 再
多 加 解 释 了, 作 法 如 下:
<html> <head> <script language="LiveScript"> <!-- Hiding function hello() { alert("哈 罗!"); } </script> </head> <body> <a href="" onMouseOver="hello()">link</a> </body> </html>
范 例 6:
接 下 来 我 们 要 告 诉 你 一 个 使 用 日 期 和 时 间 的 例 子。 在 第 一 部 分 中, 你 已 看 过 了
lastModified 的 用 法 和 作 法。 现 在 要 告 诉 你 的 并 非 是 印 出 网 路 上 伺 服 器 或 文 件
修 改 日 期, 而 是 你 个 人 客 户 端 机 器 的 日 期 和 时 间。 以 下 就 是 执 行 结 果:
现 在 时 间 是: 14:2
今 天 日 期 为: 4/20/2007
做 法 如 下:
<script language="LiveScript"> <!-- Hiding today = new Date() document.write("现 在 时 间 是: ",today.getHours(),":",today.getMinutes()) document.write("<br>今 天 日 期 为: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear()); // end hiding contents --> </script>在 本 例 中, 我 们 必 需 首 先 建 立 一 个 日 期 变 数, 这 可 以 由 today= new Date()来 完 成。
如 果 没 有 特 别 指 定 时 间 与 日 期 的 话, 浏 览 器 将 会 采 用 本 地 客 户 端 机 器 的 时 间, 若 将
它 放 入 变 数 today 中。 这 儿 要 注 意 的 是: 我 们 并 没 有 宣 告 today 这 个 变 数 的 型 态,
这 和 Java 或 其 他 的 程 式 语 言 在 用 到 变 数 之 前 必 需 先 加 以 宣 告 的 方 式 有 相 当 大 的 不
同。 在 完 成 today 的 日 期 变 数 後, 我 们 等 於 建 立 了 一 个 具 有 本 地 时 间 与 日 期 的 物 件
(object)。 接 着 就 可 以 使 用 get... 的 method 以 取 得 today 这 个 物 件 的 时 间 和 日 期。
请 注 意 getMonth 这 个 method 所 取 得 的 月 份 范 围 是 由 0~11, 所 以 必 须 加 1 以 代
表 真 正 的 1 月 至 12 月。 看 完 以 上 的 例 子 後, 想 想 你 可 以 使 你 的 文 件 变 得 有 点
智 慧, 例 如: 某 个 文 件 有 时 效 限 制 的 话, 你 可 以 利 用 我 们 在 上 一 部 份 的范 例 4
中 所 提 到 的 功 能 和 这 一 个 范 例 中 所 学 习 到 的 功 能, 设 计 一 个 让 你 的 文 件 在 第10天
以 後 读 到 的 话 就 会 告 诉 读 者:"喂! 这 篇 已 过 时 了!"的 程 式, 试 试 看, 并 不 难!
除 以 上 功 能 外, 在 建 立 日 期 物 件 时 你 也 可 以 事 先 设 定 日 期 如 下:
docStarted= new Date(96,0,13)
首 先 是 年(西 元), 接 着 是 月(但 记 得 减 1), 再 接 着 是 日。 同 样 的 方 法 也 可 以
加 上 时 间 的 设 定, 如 下:
docStarted = new Date(96,0,13,10,50,0)
前 三 个 是 日 期 的 年、 月、 日, 接 着 是 时、 分、 秒。 最 後, 我 们 必 须 提 醒 你,
JavaScript 并 没 有 实 际 的 日 期 型 态, 但 是 它 却 能 毫 不 费 力 地 显 示 出 日 期 和 时 间,
原 因 是 它 是 从 1 / 1 / 1970 0:0h 开 始 以 ms(milli seconds) 来 计 算 目 前 的 时 间 的,
这 听 起 来 似 有 些 复 杂, 但 你 倒 不 用 担 心, 它 有 标 准 的 共 用 函 数 可 以 计 算,
你 只 要 知 道 如 何 用 就 可 以 了!
范 例 7:
接 下 来 我 们 要 为 你 介 绍 一 个 可 以 产 生 乱 数 的 函 数, 也 是 以 JavaScript 所 写 的。
这 个 函 数 只 是 利 用 了 一 点 小 技 巧 而 已, 而 这 种 技 巧 在 大 部 分 的 编 译 器(compiler)中,
大 都 是 如 此(或 类 似) 计 算 出 乱 数 来 的。 我 相 信 JavaScript 最 後 应 也 会 以 相 似 的 方
法 来 产 生 这 样 的 method , 如 果 它 会 提 供 这 样 功 能 的 话。 以 下 是 此 函 数 的 结 果:
这 是 一 个 计 算 产 生 的 乱 数: 0.17598659903657765
以 下 是 这 个 作 法 的 写 法:
<html> <head> <script language="LiveScript"> function RandomNumber() { today = new Date(); num = Math.abs(Math.sin(today.getTime())); return num; } </script> </head> <body> <script language="LiveScript"> <!-- document.write("This is a random number:", RandomNumber()); // --> </script> </body> </html>
我 们 的 做 法 是 以 上 一 个 范 例 中 的 时 间 函 数; 它 会 出 现 一 个 很 大 的 数,
利 用 这 个 数 再 加 以 运 算 即 可! 例 如: 将 它 拿 来 做 正 弦 函 数(sin) 的 运
算, 得 到 的 数 再 做 绝 对 值 的 运 算, 结 果 可 以 得 到 一 个 介 於 0 与 1 间 的
实 数。 因 为 时 间 的 改 变 是 ms 为 单 位, 而 且 你 绝 不 会 获 得 相 同 的 数 字。
不 过 这 个 做 法 并 不 适 合 拿 来 快 速 的 连 续 产 生 一 系 列 的 乱 数, 但 如 果 你
是 不 定 时, 久 久 的 用 一 次, 那 效 果 就 不 错 了!
范 例 8:
JavaScript 的 一 个 重 要 特 点 是 它 可 以 制 作 视 窗。 你 可 以 产 生 一 个 的 视 窗, 并 且
在 此 视 窗 中 载 入 HTML 文 件, 完 全 以 JavaScript 来 航 游 网 际 网 路(Internet )。
接 下 来 的 范 例 就 是 告 诉 你 如 何 开 启 一 个 视 窗 并 且 写 点 东 西 进 去, 你 可 先 试 试
按 一 下 范 中 之 接 钮 看 看!
原 始 程 式 如 下:
<html> <head> <script language="LiveScript"> function WinOpen() { msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no"); msg.document.write("<HEAD><TITLE>哈 罗!</TITLE></HEAD>"); msg.document.write("<CENTER><H1>酷 毙 了!</H1><h2>这 是<B>JavaScript</B>所 开 的 视 窗!</h2></CENTER>"); } </script> </head> <body> <form> <input type="button" name="Button1" value="Push me" onclick="WinOpen()"> </form> </body> </html>这 儿 你 又 看 到 用 按 钮 来 启 动 函 数。 这 次 的 函 数 WinOpen()是 藉 着 一 个 open
的 method 来 产 生 一 个 新 的 视 窗。 第 一 对 双 引 号("")是 用 来 描 述 欲 载 入 至 视 窗
中 的 文 件 URL 位 置。 如 果 留 者 空 白 的 话, 那 就 会 呈 现 一 个 空 白 视 窗, 并 可 以
透 过 JavaScript 写 入 东 西! 下 一 对 双 引 号 内 的 内 容 是 这 个 新 开 启 视 窗 的 名 字,
你 可 以 喜 欢 给 它 任 意 一 个 名 字, 但 不 可 加 入 空 白, 如 用 Display Window 的 话 便
会 出 现 错 误 讯 息, 请 注 意。 接 下 来 的 一 连 串 双 引 号 内 所 指 定 的 是 该 视 窗
的 相 关 性 质(properties), 这 些 蛮 有 趣 的, 你 可 以 指 定 要 不 要 有 工 具 棒(toolbar) 、
卷 轴(scrollbar), 等 等, 例 如: 如 果 你 写 toolbar = yes, 那 就 会 在 你 所 产 生 出
来 的 视 窗 中 出 现 一 排 工 具 列。 以 下 有 许 多 你 可 以 改 变 的 视 窗 特 性, 请 注 意 它 们
字 中 间 不 可 以 有 空 白:
toolbar
location
directories
status
menubar
scrollbars
resizable
copyhistory
width=pixels
height=pixels
以 上 的 pixels 部 分, 你 可 以 填 入 点 数 的 数 值, 这 数 值 是 告 诉 浏 览 器 这 个 视 窗 的
大 小。 在 开 启 视 窗, 并 且 将 它 称 为 msg 以 後, 就 可 以 开 始 写 些 东 西 到 视 窗 中 了。
你 可 以 写 入 一 般 正 规 的 HTML 语 法 文 字。 哇! 这 可 不 得 了 了, 也 就 是 说, 你 可 以
利 用 先 前 使 用 者 在 form 表 格 中 输 入 给 你 的 文 章 直 接 将 它 回 应 至 浏 览 器 上 来 了! 这 些
功 能 在 几 个 月 前 大 概 还 只 能 用 CGI 才 能 达 到 喔! 现 在 你 不 用 CGI 也 可 以 做 了!
回 主 目 录
希 你 能 对 我 们 的 介 绍 感 到 还 算 不 错。 由 於 JavaScript 尚 未 完 全 发 展 完 成,
并 且 很 可 能 会 再 继 续 地 做 一 些 更 动, 希 这 儿 的 范 例 到 时 都 还 能 执 行, 在
JavaScript 更 多 特 性 完 成 後, 我 们 也 会 继 续 地 再 为 你 介 绍 一 些 新 的 范 例 的!
本章编译:钱 炳 全