欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 跨瀏覽器開發(fā)經(jīng)驗(yàn)總結(jié)(五) js 事件

 更新時(shí)間:2010年05月19日 19:02:33   作者:  
javascript 跨瀏覽器開發(fā)之js 事件的兼容性問(wèn)題,需要的朋友可以參考下。
簡(jiǎn)單事件模型和高級(jí)事件模型

簡(jiǎn)單事件模型和高級(jí)事件模型簡(jiǎn)單事件,就是事件與頁(yè)面元素直觀的綁定在一起的形式,如:
復(fù)制代碼 代碼如下:

<div onclick="alert(this.innerHTML);">
element.onclick = function(){alert(this.innerHTML);}

只要不是用了個(gè)別瀏覽器獨(dú)有的事件,一般的click,mouseover事件等在各瀏覽器中都可以這么使用。

但是當(dāng)一個(gè)事件需要綁定多個(gè)監(jiān)聽,或者需要?jiǎng)討B(tài)注冊(cè)/移出監(jiān)聽時(shí),簡(jiǎn)單事件模型就不夠用了,需要使用高級(jí)事件模型(IE和其他瀏覽器在使用高級(jí)事件模型時(shí)就有區(qū)別了):
復(fù)制代碼 代碼如下:

//注冊(cè)
function addEventHandler(element, evtName, callback, useCapture) {
//DOM標(biāo)準(zhǔn)
if (element.addEventListener) {
element.addEventListener(evtName, callback, useCapture);
} else {
//IE方式,忽略u(píng)seCapture參數(shù)
element.attachEvent('on' + evtName, callback);
}
}

//移除
function removeEventHandler(element, evtName, callback, useCapture) {
//DOM標(biāo)準(zhǔn)
if (element.removeEventListener) {
element.removeEventListener(evtName, callback, useCapture);
} else {
//IE方式,忽略u(píng)seCapture參數(shù)
element.dettachEvent('on' + evtName, callback);
}
}



標(biāo)簽中onclick事件與href屬性的調(diào)用順序關(guān)系
在a標(biāo)簽響應(yīng)點(diǎn)擊事件時(shí),會(huì)先進(jìn)行onclick事件的響應(yīng),再執(zhí)行href中的跳轉(zhuǎn)方法。如以下標(biāo)簽點(diǎn)擊后會(huì)先后提示“button”和“href”:

<a href=”javascript:alert(“href”);” onclick="alert(this.innerHTML);"> button </a>

但是,最好不要在href中定義具體的javascript方法,因?yàn)檫@個(gè)是定義跳轉(zhuǎn)的鏈接地址的屬性,如果需要先后執(zhí)行兩個(gè)javascript方法,應(yīng)該這樣寫:

<a href=”#” onclick="alert(this.innerHTML); alert(“href”);"> button </a>

但是上面的寫法中如果onclick綁定的響應(yīng)方法中并沒(méi)有提交請(qǐng)求跳轉(zhuǎn)至別的頁(yè)面,那么會(huì)發(fā)現(xiàn)當(dāng)前網(wǎng)頁(yè)做了一次刷新,因?yàn)橐陨洗a中href=“#”表示跳轉(zhuǎn)到當(dāng)前頁(yè)的頂部,但是并沒(méi)有發(fā)出新的html請(qǐng)求。有的時(shí)候,我們并不希望頁(yè)面在響應(yīng)onclick事件后又跳回頂部(尤其是頁(yè)面高度較長(zhǎng),出現(xiàn)滾動(dòng)條,并且該鏈接位于頁(yè)面底部時(shí),跳轉(zhuǎn)至頂部后用戶還需要拖動(dòng)滾動(dòng)條找回原來(lái)位置繼續(xù)操作時(shí)),那么應(yīng)該在onclick后返回false值,阻止繼續(xù)進(jìn)行href定義的動(dòng)作,如:

<a href=”#” onclick="alert(this.innerHTML); alert(“href”);return false;"> button </a>

或者將#替換成空的javascript語(yǔ)句:

<a href=”javascript:void(0)” onclick="alert(this.innerHTML); alert(“href”);"> button </a>


onload事件的調(diào)用順序

有的時(shí)候在頁(yè)面初始化時(shí)需要調(diào)用一些腳本來(lái)設(shè)置頁(yè)面元素的初始狀態(tài),最標(biāo)準(zhǔn)的做法是用<body onload=””>方式或者document.onload方式調(diào)用。onload的事件的觸發(fā)會(huì)在頁(yè)面元素渲染完畢之后調(diào)用,這樣就保證了不會(huì)出現(xiàn)腳本執(zhí)行時(shí)找不到未渲染的頁(yè)面元素的情況。如果是在<head>區(qū)域的<script>塊中執(zhí)行腳本,并使用了頁(yè)面元素時(shí),就很有可能出現(xiàn)找不到元素的錯(cuò)誤。如果是在<body>區(qū)域的<script>塊中執(zhí)行腳本,只能使用該<script>塊之前的頁(yè)面元素,因?yàn)?lt;body>區(qū)域的元素基本是順序解析的。


onchange事件

<input>元素和<select>的<option>元素都支持onchangge事件,但是經(jīng)常我們會(huì)發(fā)現(xiàn)元素的內(nèi)容值變化了卻沒(méi)有觸發(fā)onchangge事件。這是因?yàn)閛nchange事件的觸發(fā)還有另一個(gè)條件:當(dāng)前元素處于失去焦點(diǎn)(onblur)的狀態(tài)。所以,onchange事件只能捕獲用戶操作時(shí)的值變化,對(duì)于使用javascript腳本動(dòng)態(tài)改變?cè)豽alue的情況,它是捕獲不到的。

事件截獲

因除了IE之外的瀏覽器不能識(shí)別window.event所以要使用以下方式來(lái)獲取當(dāng)前事件和事件發(fā)生的目標(biāo)元素:
var evt = e?e:(window.event?window.event:null);
var el = evt.srcElement?evt.srcElement:evt.target;

這里有一些其它相關(guān)的文章,非常值得參考下
JavaScript Event事件學(xué)習(xí)第一章 Event介紹
javascript 跨瀏覽器的事件系統(tǒng)

相關(guān)文章

  • 如何實(shí)現(xiàn)axios的自定義適配器adapter

    如何實(shí)現(xiàn)axios的自定義適配器adapter

    Axios是一個(gè)非常優(yōu)秀的基于promise的HTTP庫(kù),可以用在瀏覽器和node.js中。并且提供了很多便捷的功能,但如果我們想基于axios 擴(kuò)展一些自己的數(shù)據(jù)請(qǐng)求方式(例如某些APP內(nèi)專屬的數(shù)據(jù)請(qǐng)求方式等),并能夠使用上axios提供的便捷功能,該怎么自定義一個(gè)適配器adapter
    2021-05-05
  • 原生JS實(shí)現(xiàn)簡(jiǎn)單屏幕截圖

    原生JS實(shí)現(xiàn)簡(jiǎn)單屏幕截圖

    本文主要介紹了原生JS實(shí)現(xiàn)簡(jiǎn)單屏幕截圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • JavaScript輸出為[object?Object]問(wèn)題的解決辦法

    JavaScript輸出為[object?Object]問(wèn)題的解決辦法

    平時(shí)我們?cè)诮邮蘸蠖朔祷氐膉son對(duì)象通常是一個(gè)字符串類型的object,所以一般我們要對(duì)這個(gè)object進(jìn)行類型轉(zhuǎn)化后,我們才能使用object里面的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于JavaScript輸出為[object?Object]問(wèn)題的解決辦法,需要的朋友可以參考下
    2023-11-11
  • javascript 文件的同步加載與異步加載實(shí)現(xiàn)原理

    javascript 文件的同步加載與異步加載實(shí)現(xiàn)原理

    本文將介紹javascript 文件的同步加載與異步加載實(shí)現(xiàn)原理,需要了解的朋友可以了解下
    2012-12-12
  • Locate a File Using a File Open Dialog Box

    Locate a File Using a File Open Dialog Box

    Locate a File Using a File Open Dialog Box...
    2007-06-06
  • js或css實(shí)現(xiàn)滾動(dòng)廣告的幾種方案

    js或css實(shí)現(xiàn)滾動(dòng)廣告的幾種方案

    今天無(wú)事逛網(wǎng),突然發(fā)現(xiàn)了一個(gè)很有趣的事情,(也許只有我覺得有趣).我看到一圖片竟然在我拖動(dòng)滾動(dòng)條的時(shí)候沒(méi)有動(dòng),也許你會(huì)說(shuō)我少見多怪,不信你去找個(gè)這樣的我看看,很少有的,一般的都是一拖動(dòng)圖片就在那跳得厲害。
    2010-01-01
  • js switch case default 的用法示例介紹

    js switch case default 的用法示例介紹

    switch case default的用法應(yīng)該存在一部分人不會(huì)使用吧,其實(shí)很簡(jiǎn)單就是每個(gè)case后,一定要加:break;default,就相當(dāng)于else,不會(huì)的朋友可以了解下
    2013-10-10
  • 通過(guò)JS獲取用戶本地圖片路徑并顯示的代碼

    通過(guò)JS獲取用戶本地圖片路徑并顯示的代碼

    通過(guò)JS獲取用戶本地圖片路徑并顯示的代碼,多用于本地上傳圖片的預(yù)覽效果
    2012-02-02
  • p5.js碼繪“跳動(dòng)的小正方形”的實(shí)現(xiàn)代碼

    p5.js碼繪“跳動(dòng)的小正方形”的實(shí)現(xiàn)代碼

    這篇文章主要介紹了p5.js碼繪“跳動(dòng)的小正方形”,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • js鏈表操作(實(shí)例講解)

    js鏈表操作(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇js鏈表操作(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08

最新評(píng)論