# 1、什么是事件
瀏覽網頁時,當我們做出點擊鼠標、按鍵盤、移動鼠標等行為時,這些行為會被瀏覽器內置的JavaScript引擎所捕獲,并執行對應的某些操作(函數)。那么你的行為(動作)+ JavaScript引擎捕獲 + 執行對應的操作 = 事件。
所以,一個完整的事件應該包括:
* 用戶行為;
* 瀏覽器捕獲你的行為;
* 執行對應的操作(函數)
常見行為有:鼠標點擊、鼠標的移動、鼠標的移入和移出、鍵盤控制等等。
事件的作用是:通過事件,我們(瀏覽網頁的人)就可以和瀏覽器進行一些交互了。
# 2、事件綁定方式
語法:
```
node.事件名 = function(){
//事件被觸發時,執行這個函數。
};
//例如
document.getElementById('btn').onclick = function(){
console.log('你點擊我了');
}
```
```
<input type="button" value="點我試試" id="btn" />
<input type="text" id="username" value="請輸入用戶名" />
<script>
//找到要綁定事件的元素節點
var btn = document.getElementById('btn');
//單擊事件
btn.onclick = function(){
alert('你真敢點');
};
//找到username,綁定獲取焦點事件
document.getElementById('username').onfocus = function () {
document.getElementById('username').value = '';
};
</script>
```
在事件處理函數中,this表示綁定事件的那個元素:
所以上面獲得焦點的事件可以優化代碼為:

練習:
頁面中有很多個td,點擊td的時候,讓td的背景顏色發生變化:
> HTML代碼:
```
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
```
> css代碼:
```
<style>
table,td{
border:solid 1px #ccc;
border-collapse: collapse; /*合并邊框*/
}
td{
width:150px;
height:50px;
/*color:rgb(30,50,10);*/
}
table{
margin:10px auto; /*讓表格左右居中對齊*/
}
</style>
```
> JS代碼:
```
<script>
//點擊頁面中的td,點擊之后,讓被點擊的td背景顏色改變成紅色
//先找到所有的td
var tds = document.getElementsByTagName('td'); // 返回數組
//循環,為每個td都綁定一個單擊事件
for(var i=0; i<tds.length; i++){
tds[i].onclick = function () {
//alert(123);
//this 表示綁定事件的那個td
var r = Math.floor(Math.random()*256);
var g = Math.floor(Math.random()*256);
var b = Math.floor(Math.random()*256);
this.style.backgroundColor = 'rgb('+r+', '+g+', '+b+')';
/*if(this.style.backgroundColor != 'red'){
this.style.backgroundColor = 'red';
}else{
this.style.backgroundColor = 'white';
}*/
};
}
</script>
```
> 效果:

# 3、常用事件列舉
* 頁面事件:
oonload :當頁面載入完畢(頁面中的標簽和外部資源)后觸發
* 焦點事件
oonfocus :當獲取焦點時觸發
oonblur :當失去焦點時觸發
* 鼠標事件
oonmouseover :當鼠標懸浮時觸發
oonmouseout :當鼠標離開時觸發
* 鍵盤事件
oonkeypress :當鍵盤按下時觸發(如果按住某個鍵不松開,會一直觸發press事件)
oonkeydown :當鍵盤按下時觸發
oonkeyup :當鍵盤彈起時觸發
* 其他事件:
oonchange :內容改變時會觸發,常用于select>option。
oonsubmit :表單提交時觸發,這個事件要給form綁定而不是給提交按鈕綁定
oonresize : 頁面窗口改變大小時會觸發
oonscroll :滾動條滾動時觸發
# 4、什么是事件對象
事件對象也是一個對象,它提供了一些屬性,這些屬性描述了當前事件的特點;
不同的事件中,事件對象也有所差異,比如單擊事件中,事件對象會提供pageX和pageY屬性,表示點擊的點距離頁面的距離,比如鍵盤事件中,事件對象會提供keyCode屬性,表示按的是什么鍵。
總之,事件對象中提供了一些屬性,這些屬性可以很好的描述當前的事件的特點。
# 5、如何獲取對象
* IE瀏覽器:window.event;
* 火狐瀏覽器:傳遞給事件處理函數的形參
下面代碼演示獲取事件對象的方式:
```
<input type="text">
<script>
document.getElementsByTagName('input')[0].onclick = function(a){
//console.log(a); // IE8+ 支持,獲取事件對象的方法
//console.log(window.event); // IE8瀏覽器
//兼容各個瀏覽器的獲取事件對象的方法
/*var e;
if(window.event){
e = window.event; //IE8
}else{
e = a; // IE8+
}*/
var e = window.event||a;
};
</script>
```
# 6、事件對象常用屬性
下面列舉一些事件對象中的常用屬性:
* keyCode:表示鍵盤上的鍵對應的數值。
* altKey:表示是否按了alt鍵,按了結果為true,沒按結果為false(組合按鍵的時候,才會有作用)
* shiftKey:表示是否按了shift鍵,按了結果為true,沒按結果為false(組合按鍵的時候,才會有作用)
* ctrlKey:表示是否按了ctrl鍵,按了結果為true,沒按結果為false(組合按鍵的時候,才會有作用)
* pageX: 鼠標距離頁面左邊的距離
* pageY: 鼠標距離頁面上面的距離
* screenX: 鼠標距離屏幕左邊的距離
* screenY: 鼠標距離屏幕上面的距離
下面的代碼是獲取keyCode的代碼:
```
<script>
//在頁面中任何位置,按鍵,當鍵盤彈起的時候,執行函數
document.onkeyup = function(evt){
//先獲取事件對象
var e = window.event||evt; //兼容各個瀏覽器的獲取事件對象的方式
//獲取鍵盤對應的數字
var keyCode = e.keyCode;
//alert(keyCode);
if(keyCode == 13){
alert('您按了回車鍵');
}
}
</script>
```
- 第一天
- 一、學習目標
- 二、關于JavaScript
- 三、JS語法基礎
- 四、變量
- 五、常量
- 六、運算符
- 七、數組
- 八、對象
- 九、數據類型
- 第二天
- 一、昨日復習
- 二、今日目標
- 三、數據類型轉換
- 四、流程控制
- 五、函數基礎
- 六、作用域
- 七、標準庫(內置對象)
- 八、總結
- 第三天
- 一、昨日復習
- 二、今日目標
- 三、DOM介紹
- 四、元素(標簽)節點查詢操作
- 五、元素(標簽)節點增刪改操作
- 六、設置/獲取元素的css樣式
- 七、事件和事件對象
- 八、鍵盤keyCode對照表
- 第四天
- 一、昨日復習
- 二、今日目標
- 三、DOM之屬性節點操作
- 四、DOM對象的通用屬性
- 五、DOM獲取元素的位置
- 六、事件綁定與移除
- 七、事件對象相關屬性和方法使用
- 八、案例--可編輯的表格
- 第五天
- 一、今日目標
- 二、執行流程
- 三、定時器
- 四、閉包
- 五、案例
- 第六天
- 一、昨日回顧
- 二、今日目標
- 三、正則表達式概述
- 四、入門案例
- 五、正則語法
- 六、分組/捕獲和反向引用
- 七、匹配中文(utf-8編碼)
- 八、環視(斷言/零寬斷言/正向預測/負向預測)
- 九、正則對象的屬性和方法
- 十、支持正則表達式的 String 對象的方法
- 十一、案例
- 十二、PHP中的正則表達式
- 第七天
- 一、昨日回顧
- 二、正則案例
- 三、PHP中的正則表達式
- 四、正則練習
- 五、仿淘寶評分小星星
- 六、標簽頁效果
- 七、橫向下拉菜單
- 第八天
- 一、今日目標
- 二、面向對象編程
- 三、定義對象
- 四、對象相關操作
- 五、對象在內存中的存在形式
- 六、原型對象(關鍵)
- 七、定義對象進階
- 八、函數進階
- 第九天
- 一、昨日回顧
- 二、今日目標
- 三、Object
- 四、繼承
- 五、this指向總結
- 六、案例(貪吃蛇)
- 第十天
- 一、今日目標
- 二、Ajax概述
- 三、工作原理
- 四、XMLHttpRequest對象介紹
- 五、使用Ajax的步驟
- 六、細節問題
- 七、JSON
- 八、Ajax中,服務器返回json格式的數據
- 九、案例--省市縣三級聯動
- 第十一天
- 一、昨日回顧
- 二、今日目標
- 三、完成省市縣三級聯動
- 四、優化省市縣三級聯動
- 五、服務器返回XML格式的數據
- 六、FormData對象
- 七、跨域請求
- 八、實現跨域請求
- 第十二天
- 一、Ajax回顧
- 二、今日目標
- 三、jQuery概述
- 四、快速入門
- 五、可編輯的表格
- 六、縱向導航菜單
- 七、橫向導航菜單
- 八、標簽頁效果
- 第十三天
- 一、學習目標
- 二、雜項
- 三、jQuery中的事件
- 四、jQuery封裝的Ajax
- 五、案例 -- 無刷新的分頁
- 第十四天
- 一、昨日回顧
- 二、效果
- 三、跨域請求
- 四、文檔操作
- 五、插件編寫
- 六、自定義插件
- 七、第三方插件