綁定事件有兼容性問題,在IE早期版本中使用的是obj.attachEvent(),而其他瀏覽器使用的則是addEventListener().
這兩個方法都有三個參數,分別為:事件類型,事件函數,最后一個是布爾值,true或者是false.
true表示在事件捕獲階段執行,false表示在事件冒泡階段執行。
由于IE只支持事件冒泡,所以同大多數情況下,都是將事件處理程序添加到事件流的冒泡階段,即默認為”false”
這樣可以最大限度地兼容各種瀏覽器。 最好只在需要在是事件到達目標之前截獲它的時候將事件處理程序添加到捕獲階段。 如果不是特別需要,不建議在事件捕獲階段注冊事件處理程序。
兼容各瀏覽器的事件綁定:
~~~
function addEvent(obj, eventType, callback, bubble){
if(obj.addEventListener){
obj.addEventListener(eventType, callback, bubble);
}else{
obj.attachEvent(eventType, callback, bubble);
}
}
~~~
調用時,注意callback函數不需要加括號,與setTimeout類似。
這部分都比較容易理解,對于最后一個參數,相信很多人并不是非常理解,總之我還是需要寫程序測試一下才真正弄通。
**HTML部分內容:**
~~~
<!doctype html>
<html lang="en">
<head>
<!--網站編碼格式,UTF-8 國際編碼,GBK或 gb2312 中文編碼-->
<meta charset="UTF-8">
<meta name="Keywords" content="關鍵詞一,關鍵詞二">
<meta name="Description" content="網站描述內容">
<meta name="Author" content="">
<title>Document</title>
<!--css js 文件的引入-->
</head>
<body>
<div id="out">
<p>我是路人甲</p>
<div id="middle">
<div id="inner">最里面的</div>
</div>
<p>我是路人乙</p>
</div>
</body>
</html>
~~~
js內容:(第一種情況)
~~~
<script>
var out = document.getElementById('out');
var middle = document.getElementById('middle');
var inner = document.getElementById('inner');
//點擊inner時,觸發順序為:inner-------middle------out
out.addEventListener('click',function(){alert("我是最外面的");},false);
middle.addEventListener('click',function(){alert("我是中間的");},false);
inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>
~~~
js內容:(第二種情況)
~~~
<script>
var out = document.getElementById('out');
var middle = document.getElementById('middle');
var inner = document.getElementById('inner');
//點擊inner時,觸發順序為:out------inner-------middle
out.addEventListener('click',function(){alert("我是最外面的");},true);
middle.addEventListener('click',function(){alert("我是中間的");},true);
inner.addEventListener('click',function(){alert("我是最里面的");},true);
</script>
~~~
js內容:(第三種情況)
~~~
<script>
var out = document.getElementById('out');
var middle = document.getElementById('middle');
var inner = document.getElementById('inner');
//點擊inner時,觸發順序為:out------inner-------middle
out.addEventListener('click',function(){alert("我是最外面的");},true);
middle.addEventListener('click',function(){alert("我是中間的");},false);
inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>
~~~
js內容:(第四種情況)
~~~
<script>
var out = document.getElementById('out');
var middle = document.getElementById('middle');
var inner = document.getElementById('inner');
//點擊inner時,觸發順序為:out-------middle------inner
out.addEventListener('click',function(){alert("我是最外面的");},true);
middle.addEventListener('click',function(){alert("我是中間的");},true);
inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>
~~~
js內容:(第五種情況)
~~~
<script>
var out = document.getElementById('out');
var middle = document.getElementById('middle');
var inner = document.getElementById('inner');
//點擊inner時,觸發順序為:middle-------inner------out
out.addEventListener('click',function(){alert("我是最外面的");},false);
middle.addEventListener('click',function(){alert("我是中間的");},true);
inner.addEventListener('click',function(){alert("我是最里面的");},false);
</script>
~~~
js內容:(第六種情況)
~~~
<script>
var out = document.getElementById('out');
var middle = document.getElementById('middle');
var inner = document.getElementById('inner');
//點擊inner時,觸發順序為:out-------inner------middle
out.addEventListener('click',function(){alert("我是最外面的");},true);
middle.addEventListener('click',function(){alert("我是中間的");},false);
inner.addEventListener('click',function(){alert("我是最里面的");},true);
</script>
~~~
看完以上六種情況對應的結果,相信您已經能夠深刻理解,最后一個參數為true或false的區別了。
- 前言
- jQuery輪播圖插件
- JS模擬事件操作
- JS閉包與變量
- JS綁定事件
- HTML5之file控件
- JavaScript的this詞法
- JavaScript的this詞法(二)
- JS this詞法(三)
- JS檢測瀏覽器插件
- JS拖拽組件開發
- number輸入框
- Modernizr.js和yepnode.js
- DOM變化后事件綁定失效
- div和img之間的縫隙問題
- 詳解JavaScript作用域
- bootstrap入門
- 表單驗證(登錄/注冊)
- Bootstrap網格系統
- Bootstrap排版
- Bootstrap創建表單(一)
- Bootstrap表單(二)
- Bootstrap按鈕
- Bootstrap圖片
- Bootstrap字體圖標(glyphicons)
- Bootstrap的aria-label和aria-labelledby
- Bootstrap下拉菜單
- Bootstrap按鈕組
- Bootstrap按鈕菜單
- Bootstrap輸入框組
- Bootstrap導航元素
- Bootstrap導航欄
- sublimeText頻頻崩潰
- JQuery不同版本的差異(checkbox)
- Bootstrap面包屑導航、分頁、標簽、徽章
- Bootstrap警告
- Bootstrap進度條
- 前端的上傳下載
- JS字符串的相關方法
- CSS3選擇器(全)
- CSS3新增文本屬性詳述
- 利用CSS3實現圖片切換特效
- CSS3新增顏色屬性
- CSS3的border-radius屬性詳解
- JS創建對象幾種不同方法詳解
- JS實現繼承的幾種方式詳述(推薦)
- CSS3響應式布局
- JS模塊化開發(requireJS)
- 利用@font-face實現個性化字體
- 前端在html頁面之間傳遞參數的方法
- CSS自動換行、強制不換行、強制斷行、超出顯示省略號
- 如何在Html中引入外部頁面
- reactJS入門
- React組件生命周期
- 使用React實現類似快遞單號查詢效果
- ReactJS組件生命周期詳述
- React 屬性和狀態詳解