天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Javascript 瀏覽器事件小結(jié)

事件本身相當(dāng)直觀,常用的有:
事件描述
abort圖片被阻止而不能加載
blur,focus失去焦點(diǎn),獲得焦點(diǎn)
change適用于表單元素,當(dāng)元素使其焦點(diǎn)的時(shí)候判斷是否發(fā)生改變
click,dblclick單擊,雙擊
keydown,keyup,keypress按下鍵,鍵離開,按下鍵的時(shí)候觸發(fā),注意keypress只對(duì)數(shù)字字母鍵有效
load加載圖片或者頁面的時(shí)候
mousedown,mouseup按下鍵,放開鍵
mouseover,mouseoutover是當(dāng)鼠標(biāo)進(jìn)入的時(shí)候出發(fā),out是離開的時(shí)候觸發(fā)
mousemove鼠標(biāo)移動(dòng)
reset,submit重置和提交表單

以上僅僅是常用的事件的列表,完整具體的列表可以查找相關(guān)手冊(cè)。

1. 0級(jí)DOM上的事件處理
0級(jí)DOM上的事件處理方法是比較早的,目前也廣泛應(yīng)用,從IE4.0開始就支持這類方法。

1.1 事件注冊(cè)
下面主要介紹如何添加響應(yīng)事件,也就是為事件添加處理程序。

(1)內(nèi)聯(lián)注冊(cè)(inline registration)

這是最簡(jiǎn)單的一種,將事件響應(yīng)程序作為html標(biāo)簽的一個(gè)屬性來設(shè)置,如下例,可以是代碼,當(dāng)然更多情況下是一個(gè)函數(shù)調(diào)用。事件的句柄一般就是事件的名稱加上前綴on。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
這種方法很簡(jiǎn)單,任何瀏覽器都支持,缺點(diǎn)是將Javascript代碼和HTML代碼混雜在一起,而且不能動(dòng)態(tài)添加事件響應(yīng)程序,也不能添加多個(gè)響應(yīng)程序。

(2)傳統(tǒng)模式(traditional registration)

這種模式將事件作為對(duì)象的屬性進(jìn)行添加。例如:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
1.2 事件的參數(shù)(Event對(duì)象)
有些事件處理程序需要一些關(guān)于事件更多的信息,比如click事件發(fā)生的位置等。這些信息是通過事件參數(shù)傳給事件處理程序的。IE事件模型和W3C事件模型對(duì)此的實(shí)現(xiàn)是不同的。

IE把event對(duì)象作為window對(duì)象的一個(gè)屬性,而W3C把event對(duì)象作為處理程序的一個(gè)參數(shù)。下面以click事件為例,分別寫一個(gè)程序用于IE和支持W3C標(biāo)準(zhǔn)的瀏覽器。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
這一段頁面代碼可以把click事件對(duì)象的所有屬性都展示出來。上面的例子是W3C的瀏覽器所用的方法,要在IE下使用,只要改成onclick=”IEClick()”.注意,W3CClick中的參數(shù)名,只能是event。打印出來的屬性很多,我分別用FF3.5,Chrome3,IE8(標(biāo)準(zhǔn)模式和兼容模式)運(yùn)行,他們共有的屬性并不多,其實(shí)也就這些共有的屬性才有意義,他們是:

altKey,shiftKey,ctrlKey:是否按下alt,shift,ctrl鍵

clientX,clientY:客戶區(qū)坐標(biāo)(瀏覽器窗口),screenX,screenY:屏幕區(qū)坐標(biāo)

type:事件類型

雖然事件的參數(shù)的傳遞方式有點(diǎn)不同,但是對(duì)于寫跨瀏覽器的代碼也沒有造成太多的麻煩,只需要在函數(shù)一開始判斷下window.event有沒有定義即可。
復(fù)制代碼 代碼如下:
function BothClick(args) {
var evnt = window.event ? window.event : args;
alert(evnt.clientX);
}

注冊(cè)句柄為:<div id="adiv" onclick="BothClick(event)" >a</div>如果采用第二種方式注冊(cè)句柄,則不需要什么特別處理。

1.3 事件的浮升
頁面上的對(duì)象通常是重疊的,比如一個(gè)div中可以包括若干div或者其他元素。當(dāng)某一事件觸發(fā)的時(shí)候,同時(shí)有多個(gè)元素受影響,并且它們都有相應(yīng)的事件處理程序,那么這些事件處理程序執(zhí)行哪些?以何種順序執(zhí)行?這就是本節(jié)要討論的問題。通常情況下,一個(gè)事件被多個(gè)句柄捕獲的情形并不多見。先看一個(gè)例子(CSS省略):

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
在body,外層div和內(nèi)層div都響應(yīng)了click事件,結(jié)果如下:
image 
可見,事件是由內(nèi)向外層的元素依次觸發(fā)的。(一般教材上的說法是向上浮升,bubbling,我覺得這個(gè)向上是有歧義的,我一開始就誤認(rèn)為內(nèi)層的元素是上面的,因?yàn)樗芨采w外層的元素)用0級(jí)DOM注冊(cè)的事件,它的浮升方法無論是IE還是W3C都是統(tǒng)一的。

1.4 浮升的取消
有時(shí)候我們需要在響應(yīng)了一個(gè)事件之后,就不需要外層的元素再響應(yīng)了,可以取消事件的浮升。取消的方法IE和W3C是不一致的。IE是通過設(shè)置事件對(duì)象的cancelBubble屬性來實(shí)現(xiàn),W3C則是調(diào)用事件對(duì)象的stopPropagation方法。

例如上面的例子改為:
復(fù)制代碼 代碼如下:
function inner_click(arg){
var evnt=window.event?window.event:arg;
var dis=document.getElementById("res");
dis.innerHTML+="Inner Click <br/>";
if(evnt.stopPropagation){
evnt.stopPropagation();
}else{
evnt.cancelBubble=true;
}
}<div id="innerdiv" onclick="inner_click(event)" >

其他不變,這樣就只能看到一行輸出。

1.5 事件處理函數(shù)中的this
這個(gè)this指向的是觸發(fā)事件的對(duì)象。

下面介紹2級(jí)DOM的事件句柄。這種方式是比較新的方式,它不依賴于任何特定的事件句柄屬性。W3C規(guī)定的方式是

object.addEventListener(‘event',function,boolean)

第一個(gè)參數(shù)是事件名,第二個(gè)是事件響應(yīng)函數(shù),第三個(gè)變量如果是true,則事件函數(shù)在事件冒泡階段被觸發(fā),否則是在事件的捕獲階段被觸發(fā)。W3C規(guī)定事件的發(fā)生有兩個(gè)階段,首先是捕獲,即事件以此從最外層層的元素向內(nèi)層傳遞,相應(yīng)的事件處理函數(shù)被依次觸發(fā),然后是冒泡階段,事件從最內(nèi)層的元素向外層傳遞。 看一個(gè)例子:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
點(diǎn)擊灰色框,會(huì)依次彈出body true,div true,div false,body false. 很遺憾,IE不支持這種方式,最新的IE8也不支持。不過IE也有類似的注冊(cè)事件的方法,名字是attachEvent.不過這個(gè)方法沒有第三個(gè)參數(shù),它支持冒泡階段的事件響應(yīng)。attachEvent函數(shù)傳遞事件參數(shù)的時(shí)候是和W3C一致的,也是通過event參數(shù)傳遞,但是,其函數(shù)內(nèi)部的this指向的不是觸發(fā)事件對(duì)象,而永遠(yuǎn)指向window。在event對(duì)象中有一個(gè)屬性指向觸發(fā)該事件的對(duì)象,W3C中是target,IE中是srcElement, 在符合W3C規(guī)范的瀏覽器中,事件處理函數(shù)中的this和event.target指向的是同一個(gè)對(duì)象。下面的程序展示了一個(gè)IE和W3C兼容的事件處理程序:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
事件處理程序中W3C和IE還有諸多不一致之處,十分麻煩。好在大多都有較好的解決方案。更多信息請(qǐng)參考http://www.quirksmode.org/js/events_events.html

JavaScript技術(shù)Javascript 瀏覽器事件小結(jié),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 最新高清无码专区 | 亚洲综合色五月久久婷婷 | 男生J桶进女人P又色又爽又黄 | 韩国女主播内部vip自带氏巾 | 久久伊人天堂视频网 | 99RE6这里只有精品国产AV | 97精品国产自产在线观看永久 | 国产精品单位女同事在线 | 欧美gv明星| 丝袜美女被艹 | 久久精品无码人妻无码AV蜜臀 | 亚洲欧美日本中文子不卡 | 久久亚洲成a人片 | 麻豆天美国产一区在线播放 | 国精产品一区一区三区有限公司 | 亚洲AV蜜桃永久无码精品红樱桃 | 蜜桃传媒星空传媒在线播放 | 男女性杂交内射妇女BBWXZ | 色欲AV亚洲永久无码精品麻豆 | 噼里啪啦免费观看视频大全 | 中国成人在线视频 | 亚洲AV久久久噜噜噜噜 | 日日干夜夜艹 | 国产精品99久久久久久AV | 玩高中女同桌肉色短丝袜脚文 | 又黄又粗又爽免费观看 | 网红刘婷hd国产高清 | 99re久久精品在线播放 | 亚洲 欧美 日本 国产 高清 | 手机毛片在线观看 | 小夫妻天天恶战 | 亚州精品视频 | java农村野外妇女hd | 老湿机一区午夜精品免费福利 | 亚洲精品m在线观看 | 国产一区日韩二区欧美三区 | 国产精品久久久久久精品... | 午夜在线观看免费完整直播网页 | 小黄文纯肉短篇 | 蜜桃精品成人影片 | 国产毛多水多高潮高清 |