国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

將事件處理器作為HTML標記的屬性

2024-07-21 02:04:28
字體:
來源:轉載
供稿:網友

我們已經介紹了對象的概念,我們可以通過定義屬性和方法來定義對象。不僅如此,對象還具有與之相關的事件。由于javascript中的內建對象并沒有相關的事件,因此在前面的內容中我們并沒有提到事件這個概念。但是,bom對象則具有相關的事件。

那么,bom對象都具有哪些事件呢?

當特定的操作發生或者狀態改變時,事件將被觸發。例如,當用戶在頁面上單擊時、或單擊頁面上的超鏈接時,或者當鼠標指針移過某段文字時,都可能觸發相應的事件。另外一個經常用到的事件是頁面的load事件,當頁面加載時將觸發這個事件。

那么,事件對我們有什么用呢?

為了說明事件的作用,讓我們來看一個例子,當用戶在頁面上的任何地方單擊鼠標時,我們希望彈出一個菜單。假定我們寫好了產生彈出菜單的函數,但是我們怎么知道什么時候讓菜單彈出呢?或者換句話說,我們什么時候調用這個產生彈出菜單的函數呢?因此,我們需要以某種方法捕獲用戶單擊頁面的事件,并且確保一旦單擊頁面的事件發生時,產生彈出菜單的函數即被調用。

為了實現這個功能,需要使用一種稱為事件處理器(event handler)的機制。當事件發生時,事件處理器將連接到需要執行的事件處理代碼。事件處理器提供了當事件發生時捕獲事件、并且執行相應的事件處理程序的機制。通常我們把在代碼中加入事件處理器稱為“將事件處理代碼連接到事件”。這有點類似于設置一個鬧鐘—— 當某個事件發生時,使鬧鐘振鈴。對于一個鬧鐘來說,這個觸發事件就是當到達某一確定的時間點時。

事件處理器由關鍵字on加上要處理的事件名組成。例如,click事件的事件處理器為onclick,load事件的事件處理器為onload。

通過事件處理器,可以使用多種方法將事件處理代碼連接到事件。在本章中,我們將介紹兩種最簡單的辦法。這兩種方法不但被當前的瀏覽器所支持,而且自netscape 2瀏覽器就開始使用,甚至更早的瀏覽器也支持這兩種方法。在第12章中將介紹其他較新的且更加易于標準化的添加事件的方法。

1. 將事件處理器作為html標記的屬性

第一種方法是最常見的,即把事件處理器和關聯的代碼作為html標記的屬性和屬性值添加在相應的html標記中。

下面將創建一個簡單的html頁面,該頁面用<a>標記創建了一個超鏈接。相應地,瀏覽器將創建一個對應的a對象。我們都知道,a對象具有一個click事件,當用戶單擊超鏈接時,將觸發該超鏈接的click事件。這個頁面的代碼如下:

<html>

<body>

<a href="somepage.htm" name="linksomepage">

click me

</a>

</body>

</hml>

按照現在的情況,這個頁面除具有一個超鏈接之外并無其他的功能。單擊超鏈接,將導航到一個新的頁面somepage.htm,這是我們創建的另一個頁面。對于超鏈接,我們還沒有加上事件處理器。

正如上文所述,要為某個bom對象添加事件處理器,最常用且最簡單的方法就是直接將事件處理代碼作為html標記的屬性,添加在html標記中。在本例中,需要捕獲的就是由<a>標記所定義的a對象的click事件。當用戶單擊這個超鏈接時,我們希望能捕獲該click事件,并執行相應的事件處理代碼。因此,需要為<a>標記添加一個事件處理器,即onclick事件處理器。可以把onclick事件處理器作為一個屬性添加在<a>標記中,并把該屬性的值設置為事件觸發時要執行的處理代碼。

可以將<a>標記修改為如下代碼:

<a href="somepage.htm" name="linksomepage" onclick="alert('you clicked?')">

click me

</a>

現在,為<a>標記添加了一個屬性:onclick="alert('you clicked?')"。此時,當用戶單擊了這個超鏈接,將彈出一個消息對話框。之后,超鏈接才會執行默認的功能,并鏈接到由<a>標記的href屬性所定義的頁面。

如果連接到事件處理器的代碼只有一行,這個辦法就是可行的。但是當超鏈接被單擊時,所執行的事件處理代碼是多行時,那該怎么辦呢?

其實很簡單,我們只需要把希望執行的事件處理代碼定義為一個函數,然后在onclick事件處理器中調用這個函數。請看下面的代碼:

<html>

<body>

<script language="javascript">

function linksomepage_onclick()

{

alert('you clicked?');

return true;

}

</script>

<a href="somepage.htm" name="linksomepage" onclick="return

linksomepage_onclick()">

click me

</a>

</body>

</html>

在上面的腳本塊中,創建了一個linksomepage_onclick()函數,這是一個標準的函數。同時為了提高代碼的可讀性,我們為函數取了一個具有描述性的名字。此處,使用了objectname_event()這樣的形式作為函數的名稱。采用這種形式的名稱,可以很直接地看到這個函數與頁面上的哪一個對象關聯,并且連接的是哪一個事件。因此,在上面這個例子中,將函數定義為linksomepage_onclick(),即這個函數關聯的是名為linksomepage的超鏈接對象的onclick事件處理器。這種命名規范只是程序員的一種約定俗成,它并不是強制性的。只要在代碼中使用一致的命名規范,我們也可以使用自己喜歡的其他命名方式。

現在onclick屬性連接到了調用linksomepage_onclick()函數的代碼。因此,當用戶單擊了這個超鏈接,linksomepage_onclick()函數就將被執行。

值得注意的是,linksomepage_onclick()函數具有一個返回值,且在本例中,返回值為true。此外,在定義onclick屬性時,在函數名之前使用了一個return語句,將函數的返回值返回給onclick屬性,這是為什么呢?

由事件處理器 onclick="return linksomepage_onclick()"返回的值將被javascript用來決定超鏈接是否執行它的默認行為,即是否鏈接到一個新頁面去。如果返回值為true,則超鏈接將執行它的默認行為,并鏈接到somepage.htm頁面。如果返回值為false,則默認的事件處理功能—— 鏈接到somepage.htm頁面—— 將不會被執行,即超鏈接的默認事件處理行為被取消了。我們可以修改一下代碼以進行測試,如下所示:

function linksomepage_onclick()

{

alert('this link is going nowhere');

return false;

}

此時,你將發現僅僅彈出了一個消息對話框,超鏈接并沒有提供鏈接到somepage.htm頁面的功能。

某些對象和事件并不會使用事件處理器的返回值,因此有的時候返回值是多余的。另外,返回值為false時也并不一定總是能夠取消對象的默認行為。出于瀏覽器發展的歷史原因,對于某些瀏覽器有時當返回值為true時將取消對象的默認行為。通常,最好將返回值設置為true,在遇到特殊情況時再作出相應的處理,這樣做比較保險。

某些事件并不是直接由用戶的行為所觸發。例如,window對象具有load事件和unload事件,當頁面加載完畢時將觸發load事件,而當頁面卸載時,將觸發unload事件(頁面卸載指的是用戶關閉了瀏覽器,或者打開了其他頁面)。

實際上,window對象的事件處理器應放在<body>標記中。例如,要為window對象的load事件和unload事件添加相應的事件處理器,可以使用如下代碼:

<body language="javascript" onload="myonloadfunction()"

onunload="myonunloadfunction()">

注意,這里把<body>標記的language屬性設置為javascript,因為<body>標記并不包含在定義javascript腳本塊的<script>標記內。通常情況下,javascript就是默認的腳本語言,因此該language屬性也可以省略。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 利辛县| 盖州市| 甘肃省| 鄂托克前旗| 那坡县| 陇西县| 抚远县| 出国| 乐亭县| 静海县| 民权县| 深圳市| 得荣县| 安顺市| 常山县| 轮台县| 乌兰县| 邹平县| 平潭县| 天气| 兴国县| 贺兰县| 米泉市| 望都县| 喀什市| 白河县| 镇康县| 左权县| 兴和县| 临城县| 年辖:市辖区| 贵阳市| 北宁市| 中西区| 桃园市| 仪征市| 嘉禾县| 山阳县| 武鸣县| 泸定县| 绥中县|