javascript
Java程序员从笨鸟到菜鸟之(三十)javascript弹出框、事件、对象化编程
一:彈出框
JavaScript中有三種彈出框:警告(alert)、確認(rèn)(confirm)以及提問(prompt)。?
1.警告(alert)?
在訪問網(wǎng)站的時(shí)候,你遇到“咚”的一聲,一個(gè)小窗口出現(xiàn)在你面前,上面寫著一段警示性的文字,或是其它的提示信息。如果你不點(diǎn)擊確定,你就不能對(duì)網(wǎng)頁做任何的操作。沒錯(cuò),這個(gè)“咚”的小窗口就是alert干的。?下面的代碼是一段使用alert的實(shí)例。?
<script?type="text/JavaScript">?
alert("我是菜鳥我怕誰");?
</script>?
2.確認(rèn)(confirm)?
確認(rèn)框用于讓用戶選擇某一個(gè)問題是否符合實(shí)際情況。來看下面的代碼:我們用confirm("你是菜鳥嗎?")向訪客提問,變量r則保存了訪客的回應(yīng),它只可能有兩種取值:true或false。沒錯(cuò),它是一個(gè)布爾值。confirm后面的語句則是我們對(duì)訪客回答做出的不同回應(yīng)。?
[html]?view plaincopy print?
3.提問(prompt)?
prompt和confirm類似,不過它允許訪客隨意輸入回答。我們根據(jù)分?jǐn)?shù)來做出不同的評(píng)價(jià),現(xiàn)在我么就可以用prompt來向訪客提問,用score存儲(chǔ)用戶輸入的回答,其余的事情就都由后面的switch來完成了。?
[html]?view plaincopy print?
二:JavaScript事件?
我們之前提到過函數(shù)的調(diào)用。函數(shù)定義之后,默認(rèn)是不會(huì)執(zhí)行的,這時(shí)候就需要一些事件來觸發(fā)這個(gè)函數(shù)的執(zhí)行。?JavaScript很多有很多事件,例如鼠標(biāo)的點(diǎn)擊、移動(dòng),網(wǎng)頁的載入和關(guān)閉。我們一起來看幾個(gè)事件的實(shí)例。?
1.點(diǎn)擊事件?
使用點(diǎn)擊事件調(diào)用,需要給元素設(shè)置onclick屬性。示例代碼如下:?
<button?value="點(diǎn)擊提交"?οnclick="displaymessage()">onclick調(diào)用函數(shù)</button>?
由于設(shè)置了οnclick="displaymessage()",因此點(diǎn)擊按鈕則會(huì)調(diào)用函數(shù)。?
2.鼠標(biāo)經(jīng)過、移出事件?
使用鼠標(biāo)經(jīng)過事件調(diào)用函數(shù)的代碼如下:?
<button?value="點(diǎn)擊提交"?οnmοuseοver="displaymessage()">鼠標(biāo)滑過調(diào)用函數(shù)</button>?
當(dāng)鼠標(biāo)經(jīng)過按鈕時(shí),觸發(fā)onmouseover事件,將會(huì)調(diào)用函數(shù)displaymessage()。?
使用鼠標(biāo)移出事件調(diào)用函數(shù)的代碼如下:?
<button?value="點(diǎn)擊提交"?οnmοuseοut="displaymessage()">鼠標(biāo)移出調(diào)用函數(shù)</button>?
把鼠標(biāo)移動(dòng)到這個(gè)按鈕里面,當(dāng)再移動(dòng)出去時(shí),觸發(fā)onmouseout?事件,將會(huì)調(diào)用函數(shù)displaymessage()。?
11.3更多事件?
JavaScript中還有很多事件,完整的列表可以看看http://www.w3pop.com/learn/view/p/3/o/0/doc/jsref_events/。?
下面的列表列舉了可以插入HTML標(biāo)簽中來定義事件動(dòng)作的屬性,具體的用法請(qǐng)參考上面的網(wǎng)站
| 屬性? | 事件發(fā)生時(shí)機(jī)? |
| onabort? | 圖片下載被打斷時(shí)? |
| onblur? | 元素失去焦點(diǎn)時(shí)? |
| onchange? | 框內(nèi)容改變時(shí)? |
| onclick? | 鼠標(biāo)點(diǎn)擊一個(gè)對(duì)象時(shí)? |
| ondblclick? | 鼠標(biāo)雙擊一個(gè)對(duì)象時(shí)? |
| onerror? | 當(dāng)加載文檔或圖片時(shí)發(fā)生錯(cuò)誤時(shí)? |
| onfocus? | 當(dāng)元素獲取焦點(diǎn)時(shí)? |
| onkeydown? | 按下鍵盤按鍵時(shí)? |
| onkeypress? | 按下或按住鍵盤按鍵時(shí)? |
| onkeyup? | 放開鍵盤按鍵時(shí)? |
| onload? | 頁面或圖片加載完成時(shí)? |
| onmousedown? | 鼠標(biāo)被按下時(shí)? |
| onmousemove? | 鼠標(biāo)被移動(dòng)時(shí)? |
| onmouseout? | 鼠標(biāo)離開元素時(shí)? |
| onmouseover? | 鼠標(biāo)經(jīng)過元素時(shí)? |
| onmouseup? | 釋放鼠標(biāo)按鍵時(shí)? |
| onreset? | 重新點(diǎn)擊鼠標(biāo)按鍵時(shí)? |
| onresize? | 當(dāng)窗口或框架被重新定義尺寸時(shí)? |
| onselect? | 文本被選擇時(shí)? |
| onsubmit? | 點(diǎn)擊提交按鈕時(shí)? |
| onunload? | 用戶離開頁面時(shí)? |
三:JavaScript?對(duì)象化編程?
JavaScript?是使用“對(duì)象化編程”的,或者叫“面向?qū)ο缶幊獭钡摹K^“對(duì)象化編程”,意思是把?JavaScript?能涉及的范圍劃分成大大小小的對(duì)象,對(duì)象下面還繼續(xù)劃分對(duì)象直至非常詳細(xì)為止,所有的編程都以對(duì)象為出發(fā)點(diǎn),基于對(duì)象。小到一個(gè)變量,大到網(wǎng)頁文檔、窗口甚至屏幕,都是對(duì)象。JavaScript對(duì)象是可以是一段文字、一幅圖片、一個(gè)表單(Form)等等。每個(gè)對(duì)象有它自己的屬性、方法和事件。對(duì)象的屬性是反映該對(duì)象某些特定的性質(zhì)的,例如:字符串的長度、圖像的長寬、文字框(Textbox)里的文字等等;對(duì)象的方法能對(duì)該對(duì)象做一些事情,例如,表單的“提交”(Submit),窗口的“滾動(dòng)”(Scrolling)等等;而對(duì)象的事件就能響應(yīng)發(fā)生在對(duì)象上的事情,例如提交表單產(chǎn)生表單的“提交事件”,點(diǎn)擊連接產(chǎn)生的“點(diǎn)擊事件”。不是所有的對(duì)象都有以上三個(gè)性質(zhì),有些沒有事件,有些只有屬性。引用對(duì)象的任一“性質(zhì)”用“<對(duì)象名>.<性質(zhì)名>”這種方法。?
JavaScript對(duì)象有:基本對(duì)象、全局對(duì)象、文檔對(duì)象。下面我們一一介紹。?
14.1基本對(duì)象?
(1)String?字符串對(duì)象?:前面博客中已經(jīng)提到過了,并且具體用法和方法和Java中的基本相識(shí),在此不在寫了
(2)Array?數(shù)組對(duì)象?
數(shù)組對(duì)象是一個(gè)對(duì)象的集合,里邊的對(duì)象可以是不同類型的。數(shù)組的每一個(gè)成員對(duì)象都有一個(gè)“下標(biāo)”,用來表示它在數(shù)組中的位置,是從零開始的。?
屬性?
length?用法:<數(shù)組對(duì)象>.length;返回:數(shù)組的長度,即數(shù)組里有多少個(gè)元素。它等于數(shù)組里最后一個(gè)元素的下標(biāo)加一。?
方法?
join()?用法:<數(shù)組對(duì)象>.join(<分隔符>);返回一個(gè)字符串,該字符串把數(shù)組中的各個(gè)元素串起來,用<分隔符>置于元素與元素之間。這個(gè)方法不影響數(shù)組原本的內(nèi)容。?
reverse()?用法:<數(shù)組對(duì)象>.reverse();使數(shù)組中的元素順序反過來。如果對(duì)數(shù)組[1,?2,?3]使用這個(gè)方法,它將使數(shù)組變成:[3,?2,?1]。?
slice()?用法:<數(shù)組對(duì)象>.slice(<始>[,?<終>]);返回一個(gè)數(shù)組,該數(shù)組是原數(shù)組的子集,始于<始>,終于<終>。如果不給出<終>,則子集一直取到原數(shù)組的結(jié)尾。?
sort()?用法:<數(shù)組對(duì)象>.sort([<方法函數(shù)>]);使數(shù)組中的元素按照一定的順序排列。如果不指定<方法函數(shù)>,則按字母順序排列。在這種情況下,80?是比?9?排得前的。如果指定<方法函數(shù)>,則按<方法函數(shù)>所指定的排序方法排序。<方法函數(shù)>比較難講述,這里只將一些有用的<方法函數(shù)>介紹給大家。?
按升序排列數(shù)字:?
function?sortMethod(a,?b)?{?
return?a?-?b;?
}?
myArray.sort(sortMethod);?
按降序排列數(shù)字:把上面的“a?-?b”該成“b?-?a”。?
(3)Math?“數(shù)學(xué)”對(duì)象?
Math對(duì)象,提供對(duì)數(shù)據(jù)的數(shù)學(xué)計(jì)算。下面所提到的屬性和方法,不再詳細(xì)說明“用法”,大家在使用的時(shí)候記住用“Math.<名>”這種格式。?
屬性?
E?返回常數(shù)?e?(2.718281828...)。?
LN2?返回?2?的自然對(duì)數(shù)?(ln?2)。?
LN10?返回?10?的自然對(duì)數(shù)?(ln?10)。?
LOG2E?返回以?2?為低的?e?的對(duì)數(shù)?(log2e)。?
LOG10E?返回以?10?為低的?e?的對(duì)數(shù)?(log10e)。?
PI?返回π(3.1415926535...)。?
SQRT1_2?返回?1/2?的平方根。?SQRT2?返回?2?的平方根。?
方法?
abs(x)?返回?x?的絕對(duì)值。?
acos(x)?返回?x?的反余弦值(余弦值等于?x?的角度),用弧度表示。?asin(x)?返回?x?的反正弦值。?
atan(x)?返回?x?的反正切值。?
atan2(x,?y)?返回復(fù)平面內(nèi)點(diǎn)(x,?y)對(duì)應(yīng)的復(fù)數(shù)的幅角,用弧度表示,其值在-π?到π之間。?
ceil(x)?返回大于等于?x?的最小整數(shù)。?
cos(x)?返回?x?的余弦。?
exp(x)?返回?e?的?x?次冪?(ex)。?
floor(x)?返回小于等于?x?的最大整數(shù)。?
log(x)?返回?x?的自然對(duì)數(shù)?(ln?x)。?
max(a,?b)?返回?a,?b?中較大的數(shù)。?
min(a,?b)?返回?a,?b?中較小的數(shù)。?
pow(n,?m)?返回?n?的?m?次冪?(nm)。?
random()?返回大于?0?小于?1?的一個(gè)隨機(jī)數(shù)。?
round(x)?返回?x?四舍五入后的值。?
sin(x)?返回?x?的正弦。?
sqrt(x)?返回?x?的平方根。?
tan(x)?返回?x?的正切。?
(4)Date?對(duì)象?
Date?日期對(duì)象。這個(gè)對(duì)象可以儲(chǔ)存任意一個(gè)日期,從?0001?年到?9999?年,并且可以精確到毫秒數(shù)(1/1000?秒)。?
定義一個(gè)日期對(duì)象:?
var?today?=?new?Date();?
這個(gè)方法使?d?成為日期對(duì)象,并且已有初始值:當(dāng)前時(shí)間。如果要自定初始值,可以用下列方法:?
var?d?=?new?Date(99,?10,?1);?//99?年?10?月?1?日?var?d?=?new?Date('Oct?1,?1999');?//99?年?10?月?1?日?
最好的方法就是用下面介紹的“方法”來嚴(yán)格的定義時(shí)間。?
方法?
以下有很多getXXX()、setXXX()這樣的方法,getXXX()是獲得某個(gè)數(shù)值,而setXXX()是設(shè)定某個(gè)數(shù)值。?
如無說明,方法的使用格式為:“<對(duì)象>.<方法>”,下同。?
get/setFullYear()?返回/設(shè)置年份,用四位數(shù)表示。如果使用“x.setFullYear(99)”,則年份被設(shè)定為?0099?年。?
get/setYear()?返回/設(shè)置年份,用兩位數(shù)表示。設(shè)定的時(shí)候?yàn)g覽器自動(dòng)加上“19”開頭,故使用“x.setYear(00)”把年份設(shè)定為?1900?年。?
get/setMonth()?返回/設(shè)置月份,?0?表示1月。?
get/setDate()?返回/設(shè)置日期。?
get/setDay()?返回/設(shè)置星期,0?表示星期天。?
get/setHours()?返回/設(shè)置小時(shí)數(shù),24小時(shí)制。
get/setMinutes()?返回/設(shè)置分鐘數(shù)。
get/setSeconds()?返回/設(shè)置秒鐘數(shù)。?
get/setMilliseconds()?返回/設(shè)置毫秒數(shù)。?
get/setTime()?返回/設(shè)置時(shí)間,該時(shí)間就是日期對(duì)象的內(nèi)部處理方法:從?1970?年?1?月?1?日零時(shí)正開始計(jì)算到日期對(duì)象所指的日期的毫秒數(shù)。如果要使某日期對(duì)象所指的時(shí)間推遲?1?小時(shí),就用:“x.setTime(x.getTime()?+?60?*?60?*?1000);”(一小時(shí)?60?分,一分?60?秒,一秒?1000?毫秒)。?
getTimezoneOffset()?返回日期對(duì)象采用的時(shí)區(qū)與格林威治時(shí)間所差的分鐘數(shù)。在格林威治東方的市區(qū),該值為負(fù),例如:中國時(shí)區(qū)(GMT+0800)返回“-480”。?toString()?返回一個(gè)字符串,描述日期對(duì)象所指的日期。這個(gè)字符串的格式類似于:“FriJul?21?15:43:46?UTC+0800?2000”。?
toLocaleString()?返回一個(gè)字符串,描述日期對(duì)象所指的日期,用本地時(shí)間表示格式。如:“2000-07-21?15:43:46”。?
toGMTString()?返回一個(gè)字符串,描述日期對(duì)象所指的日期,用?GMT?格式。?
toUTCString()?返回一個(gè)字符串,描述日期對(duì)象所指的日期,用?UTC?格式。?
parse()?用法:Date.parse(<日期對(duì)象>);返回該日期對(duì)象的內(nèi)部表達(dá)方式。?
下面例子顯示當(dāng)前日期:?
[html]?view plaincopy print?
?2.文檔對(duì)象?
文檔對(duì)象是指在網(wǎng)頁文檔里劃分出來的對(duì)象。在?JavaScript?能夠涉及的范圍內(nèi)有如下幾個(gè)“大”對(duì)象:window,?document,?location,?navigator,?screen,?history?等。下面是一個(gè)文檔對(duì)象樹。?
要引用某個(gè)對(duì)象,就要把父級(jí)的對(duì)象都列出來。例如,要引用某表單“MyForm”的某文字框“UserName”,就要用“document.?MyForm.?UserName”。?
引用Form下的表單元素對(duì)象不使用名稱,比如Button,而是通過對(duì)象的ID?或?Name進(jìn)行引用,或使用它所屬的對(duì)象數(shù)組。比如:?
<input?id="UserName"?type="text"?/>?
var?name?=?document.getElementById("UserName");//通過id獲取值?
(1)navigator?
navigator?瀏覽器對(duì)象?反映了當(dāng)前使用的瀏覽器的資料。?
屬性?
appCodeName?返回瀏覽器的“碼名”,流行的?IE?和?NN?都返回?'Mozilla'。?
appName?返回瀏覽器名。IE?返回?'Microsoft?Internet?Explorer',NN?返回?'Netscape'。
appVersion?返回瀏覽器版本,包括了大版本號(hào)、小版本號(hào)、語言、操作平臺(tái)等信息。?
platform?返回瀏覽器的操作平臺(tái),對(duì)于?Windows?9x?上的瀏覽器,返回?'Win32'(大小寫可能有差異)。?
userAgent?返回以上全部信息。例如,IE5.01?返回?'Mozilla/4.0?(compatible;?MSIE?5.01;?Windows?98)'。?
javaEnabled()?返回一個(gè)布爾值,代表當(dāng)前瀏覽器允許不允許?Java。?
(2)screen?
screen?屏幕對(duì)象?反映了當(dāng)前用戶的屏幕設(shè)置。?
屬性?
width?返回屏幕的寬度(像素?cái)?shù))。?height?返回屏幕的高度。?availWidth?返回屏幕的可用寬度(除去了一些不自動(dòng)隱藏的類似任務(wù)欄的東西所占用的寬度)。
?availHeight?返回屏幕的可用高度。
?colorDepth?返回當(dāng)前顏色設(shè)置所用的位數(shù)?-?1:黑白;8:256色;16:增強(qiáng)色;24/32:真彩色?
(3)window?
window?窗口對(duì)象是最大的對(duì)象,它描述的是一個(gè)瀏覽器窗口。一般要引用它的屬性和方法時(shí),不需要用“window.xxx”這種形式,而直接使用“xxx”。一個(gè)框架頁面也是一個(gè)窗口。?
屬性?
name?窗口的名稱,由打開它的連接(<a?target="...">)或框架頁(<frame?name="...">)或某一個(gè)窗口調(diào)用的?open()?方法決定。一般我們不會(huì)用這個(gè)屬性。?
status?指窗口下方的“狀態(tài)欄”所顯示的內(nèi)容。通過對(duì)?status?賦值,可以改變狀態(tài)欄的顯示。?
opener?用法:window.opener;返回打開本窗口的窗口對(duì)象。
注意:返回的是一個(gè)窗口對(duì)象。如果窗口不是由其他窗口打開的,在?Netscape?中這個(gè)屬性返回?null;在?IE?中返回“未定義”(undefined)。
undefined?在一定程度上等于?null。
注意:undefined?不是?JavaScript?常數(shù),如果你企圖使用“undefined”,那就真的返回“未定義”了。?
self?指窗口本身,它返回的對(duì)象跟?window?對(duì)象是一模一樣的。最常用的是“self.close()”,放在<a>標(biāo)記中:“<a?href="javascript:self.close()">關(guān)閉窗口</a>”。
?parent?返回窗口所屬的框架頁對(duì)象。?
top?返回占據(jù)整個(gè)瀏覽器窗口的最頂端的框架頁對(duì)象。
?history?歷史對(duì)象,見下。?
location?地址對(duì)象,見下。?
document?文檔對(duì)象,見下。?
方法?
open()?打開一個(gè)窗口。?
用法:open(<URL字符串>,?<窗口名稱字符串>,?<參數(shù)字符串>);?<URL字符串>:描述所打開的窗口打開哪一個(gè)網(wǎng)頁。如果留空(''),則不打開任何網(wǎng)頁。?<窗口名稱字符串>:描述被打開的窗口的名稱(window.name),可以使用'_top'、'_blank'等內(nèi)建名稱。這里的名稱跟“<a?href="..."?target="...">”里的“target”屬性是一樣的。?<參數(shù)字符串>:描述被打開的窗口的樣式。如果只需要打開一個(gè)普通窗口,該字符串留空(''),如果要指定樣式,就在字符串里寫上一到多個(gè)參數(shù),參數(shù)之間用逗號(hào)隔開。?
例:打開一個(gè)?400?x?100?的干凈的窗口:?open('','_blank','width=400,height=100,menubar=no,toolbar=no,?location=no,directories=no,status=no,scrollbars=yes,resizable=yes')?
| 參數(shù)? | |
| top=#? | 窗口頂部離開屏幕頂部的像素?cái)?shù)? |
| left=#? | 窗口左端離開屏幕左端的像素?cái)?shù)? |
| width=#? | 窗口的寬度? |
| height=#? | 窗口的高度? |
| menubar=...? | 窗口有沒有菜單,取值yes或no? |
| toolbar=...? | 窗口有沒有工具條,取值yes或no? |
| location=...? | 窗口有沒有地址欄,取值yes或no? |
| directories=...? | 窗口有沒有連接區(qū),取值yes或no? |
| scrollbars=...? | 窗口有沒有滾動(dòng)條,取值yes或no? |
| status=...? | 窗口有沒有狀態(tài)欄,取值yes或no? |
| resizable=...? | 窗口給不給調(diào)整大小,取值yes或no? |
| fullscreen=? | 窗口是否全屏,取值yes或no? |
open()?方法有返回值,返回的就是它打開的窗口對(duì)象。所以,?
var?newWindow?=?open('','_blank');?
這樣把一個(gè)新窗口賦值到“newWindow”變量中,以后通過“newWindow”變量就可以控制窗口了。?
close()關(guān)閉一個(gè)已打開的窗口。?
用法:window.close()?或?self.close():關(guān)閉本窗口;?<窗口對(duì)象>.close():關(guān)閉指定的窗口。?如果該窗口有狀態(tài)欄,調(diào)用該方法后瀏覽器會(huì)警告:“網(wǎng)頁正在試圖關(guān)閉窗口,是否關(guān)閉?”然后等待用戶選擇是否;如果沒有狀態(tài)欄,調(diào)用該方法將直接關(guān)閉窗口。?
blur()?使焦點(diǎn)從窗口移走,窗口變?yōu)椤胺腔顒?dòng)窗口”。?focus()?是窗口獲得焦點(diǎn),變?yōu)椤盎顒?dòng)窗口”。?
scrollTo()?用法:[<窗口對(duì)象>.]scrollTo(x,?y);使窗口滾動(dòng),使文檔從左上角數(shù)起的(x,?y)點(diǎn)滾動(dòng)到窗口的左上角。?
scrollBy()?用法:[<窗口對(duì)象>.]scrollBy(deltaX,?deltaY);使窗口向右滾動(dòng)?deltaX?像素,向下滾動(dòng)?deltaY?像素。如果取負(fù)值,則向相反的方向滾動(dòng)。?
resizeTo()?用法:[<窗口對(duì)象>.]resizeTo(width,?height);使窗口調(diào)整大小到寬?width?像素,高?height?像素。?
resizeBy()?用法:[<窗口對(duì)象>.]resizeBy(deltaWidth,?deltaHeight);使窗口調(diào)整大小,寬增大?deltaWidth?像素,高增大?deltaHeight?像素。如果取負(fù)值,則減少。?
alert()?用法:alert(<字符串>);彈出一個(gè)只包含“確定”按鈕的對(duì)話框,顯示<字符串>的內(nèi)容,整個(gè)文檔的讀取、Script?的運(yùn)行都會(huì)暫停,直到用戶按下“確定”。?C
onfirm()?用法:confirm(<字符串>);彈出一個(gè)包含“確定”和“取消”按鈕的對(duì)話框,顯示<字符串>的內(nèi)容,要求用戶做出選擇,整個(gè)文檔的讀取、Script?的運(yùn)行都會(huì)暫停。如果用戶按下“確定”,則返回?true?值,如果按下“取消”,則返回?false?值。?
prompt()?用法:prompt(<字符串>[,?<初始值>]);彈出一個(gè)包含“確認(rèn)”“取消”和一個(gè)文本框的對(duì)話框,顯示<字符串>的內(nèi)容,要求用戶在文本框輸入一些數(shù)據(jù),整個(gè)文檔的讀取、Script?的運(yùn)行都會(huì)暫停。如果用戶按下“確認(rèn)”,則返回文本框里已有的內(nèi)容,如果用戶按下“取消”,則返回?null?值。如果指定<初始值>,則文本框里會(huì)有默認(rèn)值。?
setTimeout()和setInterval()的使用?
這兩個(gè)方法都可以用來實(shí)現(xiàn)在一個(gè)固定時(shí)間段之后去執(zhí)行JavaScript。不過兩者各有各的應(yīng)用場(chǎng)景。?實(shí)際上,setTimeout和setInterval的語法相同。它們都有兩個(gè)參數(shù),一個(gè)是將要執(zhí)行的代碼字符串,還有一個(gè)是以毫秒為單位的時(shí)間間隔,當(dāng)過了那個(gè)時(shí)間段之后就將執(zhí)行那段代碼。?不過這兩個(gè)函數(shù)還是有區(qū)別的,setInterval在執(zhí)行完一次代碼之后,經(jīng)過了那個(gè)固定的時(shí)間間隔,它還會(huì)自動(dòng)重復(fù)執(zhí)行代碼,而setTimeout只執(zhí)行一次那段代碼。?雖然表面上看來setTimeout只能應(yīng)用在on-off方式的動(dòng)作上,不過可以通過創(chuàng)建一個(gè)函數(shù)循環(huán)重復(fù)調(diào)用setTimeout,以實(shí)現(xiàn)重復(fù)的操作:?
showTime();?
function?showTime()?
{?
var?today?=?new?Date();?
alert("The?time?is:?"?+?today.toString());?
setTimeout("showTime()",?5000);?
}?
一旦調(diào)用了這個(gè)函數(shù),那么就會(huì)每隔5秒鐘就顯示一次時(shí)間。如果使用setInterval,則相應(yīng)的代碼如下所示:?
setInterval("showTime()",?5000);?
function?showTime()?
{?
var?today?=?new?Date();?
alert("The?time?is:?"?+?today.toString());?
}?
這兩種方法可能看起來非常像,而且顯示的結(jié)果也會(huì)很相似,不過兩者的最大區(qū)別就是,setTimeout方法不會(huì)每隔5秒鐘就執(zhí)行一次showTime函數(shù),它是在每次調(diào)用setTimeout后過5秒鐘再去執(zhí)行showTime函數(shù)。這意味著如果showTime函數(shù)的主體部分需要2秒鐘執(zhí)行完,那么整個(gè)函數(shù)則要每7秒鐘才執(zhí)行一次。而setInterval卻沒有被自己所調(diào)用的函數(shù)所束縛,它只是簡單地每隔一定時(shí)間就重復(fù)執(zhí)行一次那個(gè)函數(shù)。?如果要求在每隔一個(gè)固定的時(shí)間間隔后就精確地執(zhí)行某動(dòng)作,那么最好使用setInterval,而如果不想由于連續(xù)調(diào)用產(chǎn)生互相干擾的問題,尤其是每次函數(shù)的調(diào)用需要繁重的計(jì)算以及很長的處理時(shí)間,那么最好使用setTimeout。?用?setInterval?命令來創(chuàng)建的對(duì)象,可以用?clearInterval()?命令來終止。比如:?
var?MyMar=setInterval(showTime(),speed);?
clearInterval(MyMar);?
(4)history?
history?歷史對(duì)象指瀏覽器的瀏覽歷史。?
屬性?
length?歷史的項(xiàng)數(shù)。JavaScript?所能管到的歷史被限制在用瀏覽器的“前進(jìn)”“后退”鍵可以去到的范圍。本屬性返回的是“前進(jìn)”和“后退”兩個(gè)按鍵之下包含的地址數(shù)的和。?
方法?
back()?后退,跟按下“后退”鍵是等效的。?
forward()?前進(jìn),跟按下“前進(jìn)”鍵是等效的。?
Go()?用法:history.go(x);在歷史的范圍內(nèi)去到指定的一個(gè)地址。如果?x?<?0,則后退?x?個(gè)地址,如果?x?>?0,則前進(jìn)?x?個(gè)地址,如果?x?==?0,則刷新現(xiàn)在打開的網(wǎng)頁。history.go(0)?跟?location.reload()?是等效的。?
(5)location?
location?地址對(duì)象描述的是某一個(gè)窗口對(duì)象所打開的地址。要表示當(dāng)前窗口的地址,只需要使用“l(fā)ocation”就行了;若要表示某一個(gè)窗口的地址,就使用“<窗口對(duì)象>.location”。?
注意?屬于不同協(xié)議或不同主機(jī)的兩個(gè)地址之間不能互相引用對(duì)方的?location?對(duì)象,這是出于安全性的需要。例如,當(dāng)前窗口打開的是“www.a.com”下面的某一頁,另外一個(gè)窗口(對(duì)象名為:bWindow)打開的是“www.b.com”的網(wǎng)頁。如果在當(dāng)前窗口使用“bWindow.location”,就會(huì)出錯(cuò):“沒有權(quán)限”。這個(gè)錯(cuò)誤是不能用錯(cuò)誤處理程序(Event?Handler,參閱?onerror?事件)來接收處理的。?
屬性?
protocol?返回地址的協(xié)議,取值為?'http:','https:','file:'?等等。?hostname?返回地址的主機(jī)名,例如,一個(gè)“http://www.microsoft.com/china/”的地址,location.hostname?==?'www.microsoft.com'。?port?返回地址的端口號(hào),一般?http?的端口號(hào)是?'80'。?host?返回主機(jī)名和端口號(hào),如:'www.a.com:8080'。?pathname?返回路徑名,如“http://www.a.com/b/c.html”,location.pathname?==?'b/c.html'。?hash?返回“#”以及以后的內(nèi)容,如“http://www.a.com/b/c.html#chapter4”,location.hash?==?'#chapter4';如果地址里沒有“#”,則返回空字符串。?search?返回“?”以及以后的內(nèi)容,如“http://www.a.com/b/c.asp?selection=3&jumpto=4”,location.search?==?'?selection=3&jumpto=4';如果地址里沒有“?”,則返回空字符串。?href?返回以上全部內(nèi)容,也就是說,返回整個(gè)地址。在瀏覽器的地址欄上怎么顯示它就怎么返回。如果想一個(gè)窗口對(duì)象打開某地址,可以使用“l(fā)ocation.href?=?'...'”,也可以直接用“l(fā)ocation?=?'...'”來達(dá)到此目的。?
方法?
reload()?相當(dāng)于按瀏覽器上的“刷新”(IE)或“Reload”(Netscape)鍵。?replace()?打開一個(gè)?URL,并取代歷史對(duì)象中當(dāng)前位置的地址。用這個(gè)方法打開一個(gè)?URL?后,按下瀏覽器的“后退”鍵將不能返回到剛才的頁面。?
(6)document?
document?文檔對(duì)象?描述當(dāng)前窗口或指定窗口對(duì)象的文檔。它包含了文檔從<head>到</body>的內(nèi)容。?用法:document?(當(dāng)前窗口)?或?<窗口對(duì)象>.document?(指定窗口)?
屬性?
lastModified?當(dāng)前文檔的最后修改日期,是一個(gè)?Date?對(duì)象。?referrer?如果當(dāng)前文檔是通過點(diǎn)擊連接打開的,則?referrer?返回原來的?URL。?
title?指<head>標(biāo)記里用<title>...</title>定義的文字。在?Netscape?里本屬性不接受賦值。?
fgColor?指<body>標(biāo)記的?text?屬性所表示的文本顏色。?
bgColor?指<body>標(biāo)記的?bgcolor?屬性所表示的背景顏色。?linkColor?指<body>標(biāo)記的?link?屬性所表示的連接顏色。?alinkColor?指<body>標(biāo)記的?alink?屬性所表示的活動(dòng)連接顏色。?vlinkColor?指<body>標(biāo)記的?vlink?屬性所表示的已訪問連接顏色。?
方法?
open()?打開文檔以便?JavaScript?能向文檔的當(dāng)前位置(指插入?JavaScript?的位置)寫入數(shù)據(jù)。通常不需要用這個(gè)方法,在需要的時(shí)候?JavaScript?自動(dòng)調(diào)用。?
write();?writeln()?向文檔寫入數(shù)據(jù),所寫入的會(huì)當(dāng)成標(biāo)準(zhǔn)文檔?HTML?來處理。writeln()?與?write()?的不同點(diǎn)在于,writeln()?在寫入數(shù)據(jù)以后會(huì)加一個(gè)換行。這個(gè)換行只是在?HTML?中換行,具體情況能不能夠是顯示出來的文字換行,要看插入?JavaScript?的位置而定。如在<pre>標(biāo)記中插入,這個(gè)換行也會(huì)體現(xiàn)在文檔中。?
clear()?清空當(dāng)前文檔。?
close()?關(guān)閉文檔,停止寫入數(shù)據(jù)。如果用了?write[ln]()?或?clear()?方法,就一定要用?close()?方法來保證所做的更改能夠顯示出來。如果文檔還沒有完全讀取,也就是說,JavaScript?是插在文檔中的,那就不必使用該方法。?
現(xiàn)在我們已經(jīng)擁有足夠的知識(shí)來做以下這個(gè)很多網(wǎng)站都有的彈出式更新通知了。?
<script?language="JavaScript">?<!--?var?whatsNew?=?open('','_blank','top=50,left=50,width=200,height=300,'?+?'menubar=no,toolbar=no,directories=no,location=no,'?+?'status=no,resizable=no,scrollbars=yes');?whatsNew.document.write('<center><b>更新通知</b></center>');?whatsNew.document.write('<p>最后更新日期:00.08.01');?
whatsNew.document.write('<p>00.08.01:增加了“我的最愛”欄目。');?whatsNew.document.write('<p?align="right">'?+?'<a?href="javascript:self.close()">關(guān)閉窗口</a>');?whatsNew.document.close();?-->?</script>?
當(dāng)然也可以先寫好一個(gè)?HTML?文件,在?open()?方法中直接?load?這個(gè)文件。?
(7)anchors[];?links[];?Link?
anchors[];?links[];?Link?連接對(duì)象。?
用法:document.anchors[[x]];?document.links[[x]];?<anchorId>;?<linkId>?
document.anchors?是一個(gè)數(shù)組,包含了文檔中所有錨標(biāo)記(包含?name?屬性的<a>標(biāo)記),按照在文檔中的次序,從?0?開始給每個(gè)錨標(biāo)記定義了一個(gè)下標(biāo)。?
document.links?也是一個(gè)數(shù)組,包含了文檔中所有連接標(biāo)記(包含?href?屬性的<a>標(biāo)記和<map>標(biāo)記段里的<area>標(biāo)記),按照在文檔中的次序,從?0?開始給每個(gè)連接標(biāo)記定義了一個(gè)下標(biāo)。?如果一個(gè)<a>標(biāo)記既有?name?屬性,又有?href?屬性,則它既是一個(gè)?Anchor?對(duì)象,又是一個(gè)?Link?對(duì)象。?在?IE?中,如果在<a>標(biāo)記中添加“id="..."”屬性,則這個(gè)<a>對(duì)象被賦予一個(gè)標(biāo)識(shí)(ID),調(diào)用這個(gè)對(duì)象的時(shí)候只需要使用“<id>”就行了。很多文檔部件都可以用這個(gè)方法來賦予?ID,但要注意不能有兩個(gè)?ID?相同。?
anchors?和?links?作為數(shù)組,有數(shù)組的屬性和方法。單個(gè)?Anchor?對(duì)象沒有屬性;單個(gè)?Link?對(duì)象的屬性見下。?
屬性?
protocol;?hostname;?port;?host;?pathname;?hash;?search;?href?與?location?對(duì)象相同。?target?返回/指定連接的目標(biāo)窗口(字符串),與<a>標(biāo)記里的?target?屬性是一樣的。?
from:?http://blog.csdn.net/csh624366188/article/details/7453288
總結(jié)
以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(三十)javascript弹出框、事件、对象化编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java程序员从笨鸟到菜鸟之(八十四)深
- 下一篇: Java程序员从笨鸟到菜鸟之(二十九)j