標籤:
javascript事件流講解和執行個體應用
當頁面元素觸發事件的時候,該元素的容器以及整個頁面都會按照特定
順序響應該元素的觸發事件,事件傳播的順序叫做事件流。
一、事件流的分類
1.冒泡型事件(所有的瀏覽器都支援 w3c標準)
由明確的事件來源到最不確定的事件來源依次向上觸發,有內向外。
2.捕獲型事件(IE不支援 w3c標準 Firefox)
不確定的事件來源到明確的事件來源依次向下觸發,由外向內。
addEventListener(事件,處理函數,false)
addEventListener(事件,處理函數,true)
二、阻止事件流
IE:
事件對象.cancelBubble=true;
FF:
事件對象.stopPropagation();
三、目標事件來源的對象
IE:事件對象.srcElement
FF:事件對象.target
例:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
table {
margin: 0 auto;
}
td{
text-align: center;
}
</style>
<script type="text/javascript">
window.onload = function (){
var tbl = document.getElementById("tbl");
tbl.ondblclick = function(e){
var vc = e || window.event;
var ov = vc.srcElement || vc.target;
if(ov.nodeName == "TH"){
return;
}
var oldstr = ov.innerHTML;
var txts = document.createElement("input");
txts.type = "text";
ov.innerHTML = "";
ov.appendChild(txts);
txts.focus();
txts.onblur = txts.ondblclick = txts.onkeydown = function(e){
var vc = e || window.event;
if(vc.type == "blur" || (vc.type == "keydown" && vc.keyCode == "13")){
var str;
if(txts.value.trim() == ""){
str = oldstr;
}else{
str = txts.value;
}
ov.removeChild(txts);
ov.innerHTML = str;
}
}
}
}
</script>
</head>
<body>
<table id="tbl" border="1" width="700" cellpadding="10" cellspacing="0" >
<caption>學產生績單</caption>
<tr>
<th>姓名</th>
<th>年齡</th>
<th>性別</th>
<th>科目</th>
<th>分數</th>
</tr>
<tr >
<td>張三</td>
<td>21</td>
<td>男</td>
<td>JavaScript</td>
<td>86</td>
</tr>
<tr>
<td>李四</td>
<td>22</td>
<td>女</td>
<td>CSS</td>
<td>94</td>
</tr>
<tr>
<td>大二</td>
<td>20</td>
<td>女</td>
<td>HTML</td>
<td>89</td>
</tr>
</table>
</body>
</html>
javascript事件流講解和執行個體應用