JavaScript 基础
一、使用位置
JavaScript可以出现在HTML的任意地方,甚至在<HTML>之前插入也不成问题,使用<script></script>标签。不过要在框架网页中插入的话,就一定要在<frameset>之前插入,否则不会运行。
二、变量
JavaScript对数据类型要求不严格,一般来说,声明变量的时候不需要声明类型,而且就算声明了类型,在使用过程中也可以给变量赋予其他类型的值,声明变量使用var关键字。
三、String的用法:
·属性length,返回该字符串的长度。
·charAt():<字符串对象>.charAt(<位置>);返回该字符串位于第<位置>位的单个字符。
·charCodeAt():<字符串对象>.charCodeAt(<位置>);返回该字符串位于第<位置>位的单个字符的ASCII码。
·fromCharCode():String.fromCharCode(a,b,b...);返回一个字符串,该字符串每个字符的ASCII码由a,b,c...等来确定。
·indexOf():查找一个字符串对象在另一个字符串对象中的位置。位置从0开始。没找到,则返回-1。
·lastIndexOf():查找一个字符串对象在另一个字符串对象中最后一次出现的位置。
·split():字符串对象.split(<分隔符>);按分隔符拆分字符串为一个数组。
·substring():substring(<始>,[<终>]),<终>可以省略。根据位置截取字符串。
·substr():substr(<始>,[<长>]):从<始>位置截取<长>长度的字符串。
·toLowerCase:返回把原字符串所有大写字母都变成小写的字符串。
·toUpperCase:返回把原字符串所有小写字母都变成大写的字符串。
四、数组
①定义:var a=new Array();定义了一个空数组。
定义的时候就初始化:var a=new Array(元素1,元素2,元素3...);
JavaScript中只有一维数组,如果要使用多维数组,可以用虚拟方法:
var a=new Array(new Array,new Array(),new Array(),...);调用可以使用a[2][3]形式。
②方法:
join:a.join("分隔符");用分隔符把数组中各元素串起来,分隔符介于元素和元素之间。此方法不影响原数组的内容。
reverse:a.reverse();倒置数组中元素的顺序。
slice:a.slice("始","终");根据位置截取子数组,“终”可省略,则一直截取到末尾。
sort:a.sort("方法函数");按方法函数指定的规则进行排序,如果没有指定方法函数,则按字母顺序排序。
五、全局函数
·eval() 把括号内的字符串当作标准语句或表达式来运行。
·isFinite() 如果括号内的数字是“有限”的(介于 Number.MIN_VALUE 和Number.MAX_VALUE 之间)就返回 true;否则返回false。
·isNaN() 如果括号内的值是“NaN”则返回 true 否则返回 false。
·parseInt() 返回把括号内的内容转换成整数之后的值。如果括号内是字符串,则字符串开头的数字部分被转换成整数,如果以字母开头,则返回“NaN”。
·parseFloat() 返回把括号内的字符串转换成浮点数之后的值,字符串开头的数字部分被转换成浮点数,如果以字母开头,则返回“NaN”。
·toString() 用法:<对象>.toString();把对象转换成字符串。如果在括号中指定一个数值,则转换过程中所有数值转换成特定进制。
·escape() 返回括号中的字符串经过编码后的新字符串。该编码应用于URL,也就是把空格写成“%20”这种格式。“+”不被编码,如果要“+”也被编码,请用:escape('...', 1)。
·unescape() 是 escape() 的反过程。解编括号中字符串成为一般字符串。
六、Navigator浏览器对象
其包含了正在使用的Navigator的版本信息,反映了当前使用的浏览器的资料。JavaScript客户端运行时刻引擎自动创建Navigator对象。
几大属性:
appCodeName:返回浏览器的“码名”,流行的IE和NN都返回‘Mozilla’。
appName:返回浏览器名。IE返回‘Microsoft Internet Explorer’,NN返回‘Netscape’。
appVersion:返回浏览器版本,包括了大版本号、小版本号、语言、操作平台等信息。
language:语言。
mimeType:以数组表示所支持的MIME类型。
platform:返回浏览器的操作平台。
userAgent:返回以上全部信息。
plugins:以数组表示已安装的外挂程序。
javaEnabled():返回一个布尔值,代表当前浏览器支不支持Java。
七、Window窗口对象
它是JavaScript中最大的对象,它描述的是一个浏览器窗口。
Window窗口对象有如下 属性:
·name:窗口的名称。
·status:指窗口下方的“状态栏”所显示的内容。通过对status赋值,可以改变状态栏的显示。
·opener:window.opener;返回打开本窗口的窗口对象。注意:返回的是一个窗口对象。如果窗口不是由其他窗口打开的,在Netscape 中这个属性返回 null;在 IE 中返回“未定义”( undefined)。undefined 在一定程度上等于 null。注意:undefined 不是 JavaScript 常数,如果你企图使用“undefined”,那就真的返回“未定义”了。
·self 指窗口本身,它返回的对象跟 window 对象是一模一样的。最常用的是“self.close()”,放在<a>标记中:“<a href="javascript:self.close()">关闭窗口</a>”。
·parent 返回窗口所属的框架页对象。
·top 返回占据整个浏览器窗口的最顶端的框架页对象。
Window 窗口对象有如下 方法:
open:open(<URL 字符串>, <窗口名称字符串>, <参数字符串>);
说明:
· <URL 字符串>:描述所打开的窗口打开哪一个网页。如果留空,则不打开任意网页。
· <窗口名称字符串>:描述被打开的窗口的名称(window.name),可以使用'_top'、'_blank'等内建名称。这里的名称跟“<a href="..."target="...">”里的“target”属性是一样的。
· <参数字符串>:描述被打开的窗口的样貌。如果只需要打开一个普通窗口,该字符串留空(''),如果要指定样貌,就在字符串里写上一到多个参数,参数之间用逗号隔开。
例:打开一个 400 x 100 的干净的窗口:
open('','_blank','width=400,height=100,menubar=no,toolbar=no,location=no,directories=no,status=no, scrollbars=yes,resizable=yes')
open()的参数
· top=# 窗口顶部离开屏幕顶部的像素数
· left=# 窗口左端离开屏幕左端的像素数
· width=# 窗口的宽度
· height=# 窗口的高度
· menubar=... 窗口有没有菜单,取值yes 或no
· toolbar=... 窗口有没有工具条,取值yes 或 no
· location=... 窗口有没有地址栏,取值yes 或no
· directories=... 窗口有没有连接区,取值yes 或no
· scrollbars=... 窗口有没有滚动条,取值yes 或no
· status=... 窗口有没有状态栏,取值yes 或no
· resizable=... 窗口给不给调整大小,取值yes 或no
注意:open() 方法有返回值,返回的就是它打开的窗口对象.
·close() 关闭一个已打开的窗口。window.close();self.close();
· blur() 使焦点从窗口移走,窗口变为“非活动窗口”。
·scrollTo() 用法:[<窗口对象>.]scrollTo(x, y);使窗口滚动,使文档从左上角数起的(x, y)点滚动到窗口的左上角。
· scrollBy() 用法:[<窗口对象>.]scrollBy(deltaX, deltaY);使窗口向右滚动 deltaX 像素,向下滚动 deltaY 像素。如果取负值,则向相反的方向滚动。
· resizeTo() 用法:[<窗口对象>.]resizeTo(width, height);使窗口调整大小到宽 width 像素,高 height 像素。
·resizeBy() 用法:[<窗口对象>.]resizeBy(deltaWidth, deltaHeight);使窗口调整大小,宽增大 deltaWidth 像素,高增大 deltaHeight 像素。如果取负值,则减少。
·alert() 用法:alert(<字符串>);弹出一个只包含“确定”按钮的对话框,显示<字符串>的内容,整个文档的读取、Script 的运行都会暂停,直到用户按下“确定”。
·confirm() 用法:c onfirm(<字符串>);弹 出一个包含“确定”和“取消”按钮的对话框,显示<字符串>的内容,要求用户做出选择,整个文档的读取、Script 的运行都会暂停。如果用户按下“确定”,则返回 true 值,如果按下“取消”,则返回 false 值。
·prompt() 用法:prompt(<字符串>,[<初始值>]);弹出一个包含“确认”“取消”和一个文本框的对话框,显示<字符串>的内容,要求用户在文本框输入一些数据,整个文档的读取、Script 的运行都会暂停。如果用户按下“确认”,则 返回文本框里已有的内容,如 果用户按下“取消”,则返回 null 值。如果指定<初始值>,则文本框里会有默认值。
Window 窗口对象有如下 事件:
·window.onload;发生在文档全部下载完毕的时候。全部下载完毕意味着不但HTML 文件,而且包含的图片,插件,控件,小程序等全部内容都下载完毕。本事件是 window 的事件,但是在 HTML 中指定事件处理程序的时候,我们是把它写在<body>标记中的。 ·window.onunload;发生在用户退出文档(或者关闭窗口,或者到另一个页面去)的时候。与
onload 一样,要写在 HTML 中就写到<body>标记里。
·window.onresize;发生在窗口被调整大小的时候。
· window.onblur;发生在窗口失去焦点的时候。
·window.onfocus;发生在窗口得到焦点的时候。
·window.onerror;发生在错误发生的时候。
八、History历史对象:
JavaScript 中的History 历史对象包含了用户已浏览的URL的信息。鉴于安全性的需要,该对象受到很多限制,现在只剩很少的属性和方法。
length 属性,列出历史的项数。
方法:
back() 后退,跟按下“后退”键是等效的。
forward() 前进,跟按下“前进”键是等效的。
go() 用法:history.go(x);在历史的范围内去到指定的一个地址。如果x < 0,则后退 x 个地址,如果 x > 0,则前进 x 个地址,如果 x == 0,则刷新现在打开的网页。history.go(0) 跟 location.reload() 是等效的。
九、Location 地址对象
location 地址对象 它描述的是某一个窗口对象所打开的地址,使用方式:“<窗口对象>.location”,当前窗口的地址直接使用location就行了。
注意:属于不同协议或不同主机的两个地址之间不能互相引用对方的 location对象,这是出于安全性的需要。
location 对象描述了与一个给定的 Window 对象关联的完整 URL。通常情况下,一个URL 会有下面的格式:协议//主机:端口/路径名称#哈希标识?搜索条件
· “协议”是 URL 的起始部分,直到包含到第一个冒号。
·“主机”描述了主机和域名,或者一个网络主机的 IP 地址。
· “端口”描述了服务器用于通讯的通讯端口。
· 路径名称描述了 URL 的路径方面的信息。
· “哈希标识”描述了 URL 中的锚名称,包括哈希掩码(#)。此属性只应用于 HTTP 的 URL。
· “搜索条件”描述了该 URL 中的任何查询信息,包括问号。此属性只应用于 HTTP 的URL。“搜索条件”字符串包含变量和值的配对;每对之间由一个“&”连接。
属性概览:
·protocol 返回地址的协议,取值为 'http:','https:','file:' 等等。
· hostname 返回地址的主机名,例如,一个“http://www.microsoft.com/china/”的地址,location.hostname ==‘www.microsoft.com'。
· port 返回地址的端口号,一般 http 的端口号是‘80'。
· host 返回主机名和端口号,如:‘www.a.com:8080'。
·pathname 返回路径名,如“http://www.a.com/b/c.html”,location.pathname == 'b/c.html'。
· hash 返回“#”以及以后的内容,如“http://www.a.com/b/c.html#chapter4”,location.hash ==‘#chapter4';如果地址里没有“#”,则返回空字符串。
·search返回“?”以及以后的内容,如“http://www.a.com/b/c.asp?selection=3&jumpto=4”,
location.search== 'selection=3&jumpto=4';如果地址里没有“?”,则返回空字符串。
·href 返回以上全部内容,也就是说,返回整个地址。在浏览器的地址栏上怎么显示它就怎么返回。如果想一个窗口对象打开某地址,可以使用“location.href = '...'”,也可以直接用“location = '...'”来达到此目的。
方法概览:
·reload() 相当于按浏览器上的“刷新”.
·replace() 打开一个 URL,并取代历史对象中当前位置的地址。用这个方法打开一个 URL 后,按 下浏览器的“后退”键将不能返回到刚才的页面。
location 之 页面跳转js 如下:
function gotoPage(url) {
window.location = url;
}
// 对location 用法的升级,为单个页面传递参数
function goto_catalog(iCat) {
if(iCat<=0) {
top.location = "../index.aspx"; // top 出去
} else {
window.location = "../newsCat.aspx?catid="+iCat;
}
}
// 对指定框架进行跳转页面,二种方法皆可用
function goto_iframe(url) {
parent.mainFrame.location = "../index.aspx";
// parent.document.getElementById("mainFrame").src ="../index.aspx";//dom 的写法
}
// 对指定框架进行跳转页
function goto_iframe(iframename,url) {
parent.document.getElementById(iframename).src = "../index.aspx";
}
// 回到首页
function gohome() {
top.location = "/index.aspx";
}
十、Document 文档对象
Document 文档对象是JavaScript 中window 和frames 对象的一个属性,是显示于窗口或框架内的一个文档。描述当前窗口或指定窗口对象的文档。它包含了文档从<head>到</body>的内容。
使用方式:<窗口对象>.document;如果是当前窗口直接使用document就行了。
属性:
·document.title //设置文档标题等价于HTML 的<title>标签
·document.bgColor //设置页面背景色
·document.fgColor //设置前景色(文本颜色)
·document.linkColor //未点击过的链接颜色
·document.alinkColor //激活链接(焦点在此链接上)的颜色
·document.vlinkColor //已点击过的链接颜色
·document.URL //设置URL 属性从而在同一窗口打开另一网页
·document.fileCreatedDate //文件建立日期,只读属性
·document.fileModifiedDate //文件修改日期,只读属性
·document.fileSize //文件大小,只读属性
·document.cookie //设置和读出cookie
·document.charset //设置字符集 简体中文:gb2312
·cookie 关于 cookie 请参看“使用框架和 Cookies”一章。
·lastModified 当前文档的最后修改日期,是一个 Date 对象。
·referrer 如果当前文档是通过点击连接打开的,则 referrer 返回原来的URL。
·title 指<head>标记里用<title>...</title>定义的文字。在 Netscape里本属性不接受赋值。
·fgColor 指<body>标记的 text 属性所表示的文本颜色。
·bgColor 指<body>标记的 bgcolor 属性所表示的背景颜色。
·linkColor 指<body>标记的 link 属性所表示的连接颜色。
·alinkColor 指<body>标记的 alink 属性所表示的活动连接颜色。
·vlinkColor 指<body>标记的 vlink 属性所表示的已访问连接颜色。
方法:
·open() 打开文档以便 JavaScript 能向文档的当前位置(指插入JavaScript 的位置)写入数据。通常不需要用这个方法,在需要的时候JavaScript 自动调用。
·write(); writeln() 向文档写入数据,所写入的会当成标准文档 HTML来处理。writeln() 与 write() 的不同点在于,writeln() 在写入数据以后会加一个换行。这个换行只是在 HTML 中换行,具体情况能不能够是显示出来的文字换行,要看插入 JavaScript 的位置而定。如在<pre>标记中插入,这个换行也会体现在文档中。
·clear() 清空当前文档。
·close() 关闭文档,停止写入数据。如果用了 write[ln]() 或 clear()方法,就一定要用 close() 方法来保证所做的更改能够显示出来。如果文档还没有完全读取,也就是说,JavaScript 是插在文档中的,那就不必使用该方法。
十一、JavaScript 中的其他对象
1、anchors[]; links[]; Link 连接对象
用法:document.anchors[[x]]; document.links[[x]]; <anchorId>; <linkId>
document.anchors 是一个数组,包含了文档中所有锚标记(包含 name 属性的<a>标记),按 照在文档中的次序,从 0 开始给每个锚标记定义了一个下标。
document.links 也是一个数组,包含了文档中所有连接标记(包含href 属性的<a>标记和<map>标记段里的<area>标记),按照在文档中的次序,从0 开始给每个连接标记定义了一个下标。
如果一个<a>标记既有 name 属性,又有 href 属性,则它既是一个 Anchor对象,又是一个 Link 对象。
在 IE 中,如果在<a>标记中添加“id="..."”属性,则这个<a>对象被赋予一个标识(ID),调用这个对象的时候只需要使用“<id>”就行了。很多文档部件都可以用这个方法来赋予 ID,但要注意不能有两个 ID 相同。anchors 和 links 作为数组,有数组的属性和方法。单个 Anchor 对象没有属性;单个 Link 对象的属性见下。
2、embeds[] 插件对象 它是一个数组,包含了文档中所有的插件(<embed>标记)。因为每个插件的不同,每个 Embed 对象也有不同的属性和方法。
3、forms[]; Form 表单对象 document.forms[] 是一个数组,包含了文档中所有的表单(<form>)。要引用单个表单,可以用 document.forms[x],但是一般来说,人们都会这样做:在<form>标记中加上“name="..."”属性,那么直接用“document.<表单名>”就可以引用了。
Form 对象的属性
·name 返回表单的名称,也就是<form name="...">属性。
·action 返回/设定表单的提交地址,也就是<form action="...">属性。
·method 返回/设定表单的提交方法,也就是<form method="...">属性。
·target 返回/设定表单提交后返回的窗口,也就是<form target="...">属性。
·encoding 返回/设定表单提交内容的编码方式,也就是<form enctype="...">属性。
·length 返回该表单所含元素的数目。
方法
·reset() 重置表单。这与按下“重置”按钮是一样的。
·submit() 提交表单。这与按下“提交”按钮是一样的。
事件:onreset; onsubmit
以下从“Button”到“Textarea”都是表单的元素对象。
4、Button 按钮对象 由“<input type="button">”指定。引用一个 Button 对象,可以使用“<文档对象>.<表单对象>.<按钮名称>”。<按钮名称>指在<input>标记中的“name="..."”属性的值。引用任意表单元素都可以用这种方法。
属性
·name 返回/设定用<input name="...">指定的元素名称。
·value 返回/设定用<input value="...">指定的元素的值。
·form 返回包含本元素的表单对象。
方法
·blur() 从对象中移走焦点。
·focus() 让对象获得焦点。
·click() 模拟鼠标点击该对象。
事件:onclick; onmousedown; onmouseup
5、Checkbox复选框对象 由“<input type="checkbox">”指定。
属性
·name 返回/设定用<input name="...">指定的元素名称。
·value 返回/设定用<input value="...">指定的元素的值。
·form 返回包含本元素的表单对象。
·checked 返回/设定该复选框对象是否被选中。这是一个布尔值。
·defaultChecked 返回/设定该复选框对象默认是否被选中。这是一个布尔值。
方法
·blur() 从对象中移走焦点。
·focus() 让对象获得焦点。
·click() 模拟鼠标点击该对象。
事件:onclick
6、elements[]; Element 表单元素对象 <表单对象>.elements 是一个数组,包含了该表单所有的对象。一般我们不用该数组,而直接引用各个具体的对象。
7、Hidden 隐藏对象 由“<input type="hidden">”指定。
属性
·name 返回/设定用<input name="...">指定的元素名称。
·value 返回/设定用<input value="...">指定的元素的值。
·form 返回包含本元素的表单对象。
8、Password 密码输入区对象 由“<input type="password">”指定。
属性
·name 返回/设定用<input name="...">指定的元素名称。
·value 返回/设定密码输入区当前的值。
·defaultValue 返回用<input value="...">指定的默认值。
·form 返回包含本元素的表单对象。
方法
·blur() 从对象中移走焦点。
·focus() 让对象获得焦点。
·select() 选中密码输入区里全部文本。
事件 onchange
9、Radio 单选域对象 由“<input type="radio">”指定。
一组 Radio 对象有共同的名称(name 属性),这样的话,document.formName.radioName 就成了一个数组。要访问单个 Radio 对象就要用:document.formName.radioName[x]。
单个Radio 对象的属性
·name 返回/设定用<input name="...">指定的元素名称。
·value 返回/设定用<input value="...">指定的元素的值。
·form 返回包含本元素的表单对象。
·checked 返回/设定该单选域对象是否被选中。这是一个布尔值。
·defaultChecked 返回/设定该对象默认是否被选中。这是一个布尔值。
方法
·blur() 从对象中移走焦点。
·focus() 让对象获得焦点。
·click() 模拟鼠标点击该对象。
事件:onclick
10、Reset 重置按钮对象 由“<input type="reset">”指定。因为 Reset 也是按钮,所以也有 Button 对象的属性和方法。至于“onclick”事件,一般用Form对象的 onreset 代替。
11、Select 选择区(下拉菜单、列表)对象 由“<select>”指定。
属性
·name 返回/设定用<input name="...">指定的元素名称。
·length 返回 Select 对象下选项的数目。
·selectedIndex 返回被选中的选项的下标。这个下标就是在 options[] 数组中
该选项的位置。如果 Select 对象允许多项选择,则返回第一个被选中的选项的下标。
·form 返回包含本元素的表单对象。
方法
·blur() 从对象中移走焦点。
·focus() 让对象获得焦点。
事件:onchange
12、options[]; Option 选择项对象 options[] 是一个数组,包含了在同一个Select 对象下的 Option 对象。Option 对象由“<select>”下的“<options>”指定。
options[] 数组的属性
·length; selectedIndex 与所属 Select 对象的同名属性相同。
·text 返回/指定 Option 对象所显示的文本
·value 返回/指定 Option 对象的值,与<options value="...">一致。
·index 返回该 Option 对象的下标
·selected 返回/指定该对象是否被选中。通过指定 true 或者 false,可以动态的改变选中项。
·defaultSelected 返回该对象默认是否被选中。true / false。
13、Submit 提交按钮对象 由“<input type="submit">指定。因为 Submit 也是按钮,所以也有 Button 对象的属性和方法。至于“onclick”事件,一般用Form对象的 onsubmit 代替。
14、Text 文本框对象 由“<input type="text">”指定。Password 对象也是 Text对象的一种,所以 Password 对象所有的属性、方法和事件,Text 对象都有。
15、Textarea 多行文本输入区对象 由“<textarea>”指定。Textarea 对象所有的属性、方法和事件和 Text 对象相同,也就是跟 Password 对象一样。
16、images[]; Image 图片对象 document.images[] 是一个数组,包含了文档中所有的图片(<img>)。要引用单个图片,可以用 document.images[x]。如果某图片包含“name”属性,也就是用“<img name="...">”这种格式定义了一幅图片,就可以使用“document.images['...']”这种方法来引用图片。在 IE 中,如果某图片包含 ID 属性,也就是用“<img
id="...">”这种格式定义了一幅图片,就可以直接使用“<imageID>”来引用图片。
单个 Image 对象的属性
·name; src; lowsrc; width; height; vspace; hspace; border 这些属性跟<img>标记里的同名属性是一样的。在 Netscape 里,除了 src 属性,其它属性(几乎全部)都不能改的,即使改了,在文档中也不能显示出效果来。这些属性最有用的就是 src 了,通过对 src 属性赋值,可以实时的更改图片。
事件:onclick
17、不显示在文档中的 Image 对象
不显示在文档中的 Image 对象是用 var 语句 定义的:
var myImage = new Image(); 或
var myImage = new Image(<图片地址字符串>);
一般这种对象只有一个用:预读图片(preload)。因为当对对象的src 属性赋值的时候,整个文档的读取、JavaScript 的运行都暂停,让浏览器专心的读取图片。预读图片以后,浏览器的缓存里就有了图片的 Copy,到真正要把图片放到文档中的时候,图片就可以立刻显示了。现在的网页中经常会有一些图像连接,当鼠标指向它的时候,图像换成另外一幅图像,它们都是先预读图
像的。
例子:
下面适合预读少量的图片:
var imagePreload = new Image();
imagePreload.src = '001.gif';
imagePreload.src = '002.gif';
imagePreload.src = '003.gif';
下面适合预读大量的图片:
function imagePreload() {
var imgPreload = new Image();
for (i = 0; i < arguments.length; i++) {
imgPreload.src = arguments[i];
}
}
imagePreload('001.gif', '002.gif', '003.gif', '004.gif', '005.gif');
十二、事件
指定事件处理程序有三种方式:
①直接在HTML标记中指定。这种方法是用得最普遍的。如:
<body ... onload="alert(‘网页读取完成,请慢慢欣赏!')" onunload="alert('再见!')">
②编写特定对象特定事件的JavaScript。这种方法用得比较少,但是在某些场合还是很好用的。如:
<script language="JavaScript" for="window" event="onload">
alert('网页读取完成,请慢慢欣赏!');
</script>
③在 JavaScript 中说明。
<事件主角 - 对象>.<事件> = <事件处理程序>;
用这种方法要注意的是,“事件处理程序”是真正的代码,而不是字符串形式的代码。如果事件处理程序是一个自定义函数,如无使用参数的需要,就不要加“()”。
function ignoreError() {
return true;
}
window.onerror = ignoreError; // 没有使用“()”
具体事件详解:
·onblur 事件 发生在窗口失去焦点的时候。应用于:window 对象
·onchange 事件 发生在文本输入区的内容被更改,然 后焦点从文本输入区移走之后。捕捉此事件主要用于实时检测输入的有效性,或者立刻改变文档内容。应用于:P assword 对象;S elect 对象;Text 对象;Textarea 对象
·onclick 事件 发生在对象被单击的时候。单击是指鼠标停留在对象上,按下鼠标键,没有移动鼠标而放开鼠标键这一个完整的过程。一个普通按钮对象(Button)通常会有 onclick 事件处理程序,因为这种对象根本不能从用户那里得到任何信息,没有onclick 事件处理程序就等于废柴。按钮上添加 onclick 事件处理程序,可以模拟“另一个提交按钮”,方法是:在事件处理程序中更改表单的action,
target, encoding, method等一个或几个属性,然后调用表单的 submit() 方法。在Link 对象的onclick 事件处理程序中返回 false 值(return false),能阻止浏览器打开此连接。即 ,如 果有一个这样的连接:< a href=" http://www.a.com"onclick="return
false">Go!</a>,那么无论用户怎样点击,都不会去到 www.a.com 网站,除 非用户禁止浏览器运行 JavaScript。应用于:Button
对象;Checkbox 对象;Image 对象;Link 对象;Radio 对象;Reset 对象;Submit 对象
·onerror 事件 发生在错误发生的时候。它的事件处理程序通常就叫做“错误处理程序”(Error Handler),用来处理错误。上边已经介绍过,要忽略一切错误,就使用:
function ignoreError() {
return true;
}
window.onerror = ignoreError;
应用于:window 对象
·onfocus 事件 发生在窗口得到焦点的时候。应用于:window 对象
·onload 事件 发生在文档全部下载完毕的时候。全 部下载完毕意味着不但HTML 文件,而且包含的图片,插件,控件,小程序等全部内容都下载完毕。本 事件是 window 的事件,但 是在 HTML 中指定事件处理程序的时候,我们是把它写在<body>标记中的。应用于:window 对象。
·onmousedown 事件 发生在用户把鼠标放在对象上按下鼠标键的时候。参考 onmouseup 事件。应用于:Button 对象;Link 对象
·onmouseout 事件 发生在鼠标离开对象的时候。参 考 onmouseover 事件。应用于:Link 对象
·onmouseover 事件 发生在鼠标进入对象范围的时候。这个事件和onmouseout 事件,再加上图片的预读,就可以做到当鼠标移到图像连接上,图像更改的效果了。有时我们看到,在指向一个连接时,状态栏上不显示地址,而显示其它的资料,看起来这些资料是可以随时更改的。它们是这样做出来的:
<a href="..." onmouseover="window.status='Click Me Please!';
return true;" onmouseout="window.status=''; return true;">
应用于:Link 对象
·onmouseup 事件 发生在用户把鼠标放在对象上鼠标键被按下的情况下,放开鼠标键的时候。如果按下鼠标键的时候,鼠标并不在放开鼠标的对象上,则本事件不会发生。应用于:Button 对象;Link 对象
·onreset 事件 发生在表单的“重置”按钮被单击(按下并放开)的时候。通过在事件处理程序中返回 false 值(return false)可以阻止表单重置。应用于:Form 对象
·onresize 事件 发生在窗口被调整大小的时候。应用于:window 对象
·onsubmit 事件 发生在表单的“提交”按钮被单击( 按下并放开)的 时候。可以使用该事件来验证表单的有效性。通 过在事件处理程序中返回 false值(return false)可以阻止表单提交。应用于:Form 对象
·onunload 事件 发生在用户退出文档(或者关闭窗口,或者到另一个页面去)的时候。与 onload 一样,要写在 HTML 中就写到<body>标记里。有的 Web Masters 用这个方法来弹出“调查表单”,以“强迫”来者填写;有的就弹出广告窗口,唆使来者点击连接。我觉得这种“onunload="open..."”的方法很不好,有时甚至会因为弹出太多窗口而导致资源缺乏。有 什么对来者说就应该在网页上说完,不
对吗? 应用于:window 对象
十三、对象化编程
1、with语句
with语句为一个或一组语句指定默认对象。with 语句通常用来缩短特定情形下必须写的代码量。用法:with (<对象>) <语句>;
举个例子:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
当使用 with 语句时,代码变得更短且更易读:
with (Math) {
x = cos(3 * PI) + sin(LN10);
y = tan(14 * E);
}
2、this对象
this代表“当前”对象。在不同的地方,this 代表不同的对象。如果在JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
3、自定义构造函数
自定义构造函数也是用function。在 function 里边用 this 来定义属性。
function <构造函数名> [(<参数>)] {
...
this.<属性名> = <初始值>;
...
}
然后,用new 构造函数关键字来构造变量:var <变量名> = new <构造函数名>[(<参数>)];看一个搜集浏览器详细资料的自定义构造函数:
function Is() {
var agent = navigator.userAgent.toLowerCase();
this.major = parseInt(navigator.appVersion); //主版本号
this.minor = parseFloat(navigator.appVersion);//全版本号
this.ns = ((agent.indexOf('mozilla')!=-1) &&
((agent.indexOf('spoofer')==-1) && //是否 Netscape
(agent.indexOf('compatible') == -1)));
this.ns2 = (this.ns && (this.major == 3)); //是否 Netscape 2
this.ns3 = (this.ns && (this.major == 3)); //是否 Netscape 3
this.ns4b = (this.ns && (this.minor < 4.04)); //是否 Netscape 4 低版
本
this.ns4 = (this.ns && (this.major >= 4)); //是否 Netscape 4 高版
本
this.ie = (agent.indexOf("msie") != -1); //是否 IE
this.ie3 = (this.ie && (this.major == 2)); //是否 IE 3
this.ie4 = (this.ie && (this.major >= 4)); //是否 IE 4
this.op3 = (agent.indexOf("opera") != -1); //是否 Opera 3
this.win = (agent.indexOf("win")!=-1); //是否 Windows 版本
this.mac = (agent.indexOf("mac")!=-1); //是否 Macintosh 版本
this.unix = (agent.indexOf("x11")!=-1); //是否 Unix 版本
}
var is = new Is();
十四、框架
1、父框架到子框架的引用
window.frames["frameName"];
这样就引用了页面内名为frameName 的子框架。如果要引用子框架内的子框架,根据引用的框架实际就是window 对象的性质,可以这样实现:
window.frames["frameName"].frames["frameName2"];
这样就引用到了二级子框架,以此类推,可以实现多层框架的引用。
2、子框架到父框架的引用
每个window 对象都有一个parent 属性,表示它的父框架。如果该框架已经是顶层框架,则window.parent 还表示该框架本身。
3、兄弟框架间的引用
如果两个框架同为一个框架的子框架,它们称为兄弟框架,可以通过父框架来实现互相引用,例如一个页面包括2 个子框架:
<frameset rows="50%,50%">
<frame src="1.html" />
<frame src="2.html" />
</frameset>
在frame1中可以使用如下语句来引用frame2:
self.parent.frames["frame2"];
4、不同层次框架间的互相引用
框架的层次是针对顶层框架而言的。当层次不同时,只要知道自己所在的层次以及另一个框架所在的层次和名字,利用框架引用的window 对象性质,可以很容易地实现互相访问,例如:
self.parent.frames["childName"].frames["targetFrameName"];
5、对顶层框架的引用
和parent属性类似,w indow对象还有一个top 属性。它 表示对顶层框架的引用,这可以用来判断一个框架自身是否为顶层框架,例如:
//判断本框架是否为顶层框架
if(self==top){
//dosomething
}
6、改变框架的载入页面
对框架的引用就是对window 对象的引用,利用window 对象的location 属性,可以改变框架的导航,例如:
window.frames[0].location="1.html";
十五、Cookie 的基本知识
每个 Cookie 都是这样的:<cookie 名>=<值>
<cookie 名>的限制与 JavaScript 的命名限制大同小异,少了“不能用JavaScript 关键字”,多了“只能用可以用在 URL 编码中的字符”。后者比较难懂,但是只要你只用字母和数字命名,就 完全没有问题了。< 值>的要求也是“只能用可以用在 URL 编码中的字符”。每个 Cookie 都有失效日期,一旦电脑的时钟过了失效日期,这个Cookie就会被删掉。我们不能直接删掉一个 Cookie,但是可以用设定失效日期早于现在时刻的方法来间接删掉它。
如果直接使用 document.cookie 属性,或者说,用某种方法,例如给变量赋值,来获得 document.cookie 的值,我们就可以知道在现在的文档中有多少个 Cookies,每个 Cookies 的名字,和它的值。例如,在某文档中添加“document.write(document.cookie)”,结果显示:name=kevin; [email protected];
lastvisited=index.html。这意味着,文档包含 3 个 Cookies:name, email 和lastvisited,它们的值分别是 kevin, [email protected] 和 index.html。
赋值:
document.cookie = 'cookieName=' + escape('cookieValue')+ ';expires=' + expirationDateObj.toGMTString();
cookieName 表示 Cookie 的名称,cookieValue 表示Cookie 的值,expirationDateObj 表示储存着失效日期的日期对象名,如果不需要指定失效日期则不需要';expires=' +expirationDateObj.toGMTString();这段。这样浏览器默认是在关闭浏览器(也就是关闭所有窗口)之后过期。
使用 escape()方法是因为Cookie 的值的要求是“只能用可以用在 URL 编码中的字符”。所以我们用一个“escape()”方法来处理输出到Cookie 的值,用 “unescape()”来处理从 Cookie 接收过来的值。
toGMTString() 方法:设 定 Cookie 的时效日期都是用 GMT 格式的时间的,其它格式的时间是没有作用的。
示例:设定一个“name=rose”的 Cookie,在 3 个月后过期:
var expires = new Date();
expires.setTime(expires.getTime() + 3 * 30 * 24 * 60 * 60 * 1000);
/* 三个月 x 一个月当作 30 天 x 一天 24 小时
x 一小时 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */
document.cookie = 'name=rose;expires=' + expires.toGMTString();
再编写一个函数查找指定Cookie的值:
function getCookie(cookieName) {
var cookieString = document.cookie;
var start = cookieString.indexOf(cookieName + '=');
// 加上等号的原因是避免在某些 Cookie 的值里有
// 与 cookieName 一样的字符串。
if (start == -1) // 找不到
return null;
start += cookieName.length + 1;
var end = cookieString.indexOf(';', start);
if (end == -1) return unescape(cookieString.substring(start));
return unescape(cookieString.substring(start, end));
}
删除刚刚设定的name=rose Cookie。
var expires = new Date();
expires.setTime(expires.getTime() - 1);
document.cookie = 'name=rose;expires=' + expires.toGMTString();