iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
自我挑戰組

JavaScript 新手筆記系列 第 20

Day20 - 事件(01)

  • 分享至 

  • xImage
  •  

前言

真的是大事件!一開始看完還不太懂各種操作上的差別

事件

  • event = 事件:簡單說就是跟網頁互動,如:點擊滑鼠按鈕而去觸發事件而執行某種效果(如之前的 onclick )

  • MDN:一個事件的發生

    • 由使用者的操作行為所產生
    • 來自 API 因處理非同步任務所產生
    • 由程式所觸發
    • 自行定義事件並發送至特定的目標
  • 例如下面例子,按鈕事件後,觸發在 console 顯示訊息

index.html
(今日的 HTML 都維持不變動)

<body>
    <input type="button" value="按我" class="btn">
    <script src="JS/test.js"></script>
</body>

test.js

var el = document.querySelector(".btn");
el.onclick = function(){
    console.log("被按了");
}
// 點擊按鈕後,console 會出現 被按了
  • 其實事件內隱含很多訊息,可以設定一個參數檢查看看
    • 參數自定義,較常用 e、evt、event 等
    • 因此可以透過這些資訊來做互動,如遊戲

test.js

var el = document.querySelector(".btn");
el.onclick = function(evt){
    console.log(evt);
}
// 點擊按鈕後,console 會出現很多訊息,座標資訊等等

事件的做法

  • HTML 事件處理器:直接寫在 HTML 上
    • 較舊的方法,不推薦
    • JS 參雜在 HTML 裡,也比較混亂
<input type="button" value="按我" onclick="functionName();" class="btn">
  • DOM 事件處理器:element.onevent = functionName;
    • 1 個事件只能觸發 1 個函數,當有 2 個函數時可能會有錯誤
    • 事件event 前有 on
    • 函數 functionName 沒有 ()
    • 函數 function() 內容可直接寫
var el = document.querySelector(".btn");

// function 內容分開寫
function click1(){
    console.log("被按了1");
};

el.onclick = click1;
var el = document.querySelector(".btn");

// function 內容寫在裡面
el.onclick = function(){
    console.log("被按了1");
};
  • DOM 事件監聽器:element.addEventListener('event' , functionName , BooLean);
    • 事件 event 有引號 ' ',前面沒有 on
    • 函數 functionName 沒有 ()
    • BooLean 可以省略,預設是 false,詳細後續說明
    • 函數 function() 內容可直接寫
var el = document.querySelector(".btn");

// function 內容分開寫
function click2 (){
    console.log("被按了2");
}

el.addEventListener('click' , click2 , false);
var el = document.querySelector(".btn");

// function 內容寫在裡面
el.addEventListener('click' , function(){
    console.log("被按了2");
} , false);
  • 函數 functionName() 要不要?
    • 事件是希望有觸發時才去執行對應的函數,所以不要有 ()
    • () 代表會直接執行這個函數
    • 觀察下面的例子,一開始讀取網頁,都還沒按鈕就已經出現第 1 次訊息了,代表在載入時就已經先執行一次了
var el = document.querySelector(".btn");

function click(){
    console.log("被按了");
};

el.onclick = click();
// 重新整理,觀察有沒有 () 在 console 的差別

次回

事件持續進行中....


上一篇
Day19 - JSON
下一篇
Day21 - 事件(02)
系列文
JavaScript 新手筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言