第五篇:JavaScript事件處理

2021-01-11 米粒教育

初識JavaScript事件

JavaScript語言本身不會產生事件,產生事件的是網頁文檔和網頁文檔中的HTML元素。

什麼是事件呢?事件就是網頁文檔或網頁元素對外發出的通知。當HTML元素與用戶發生交互行為時,該元素會觸發相關的交互事件,例如:當用戶用滑鼠單擊網頁中的按鈕時,按鈕會觸發滑鼠單擊事件(onclick)。元素自身也會觸發事件,例如:當圖片元素加載完成後,會觸發加載完成事件(onload)。

HTML文檔或元素觸發事件時,會對JS發出的通知,通知JS程序HTML文檔或元素與用戶發生了交互,或者內容發生了變化,JS可以處理這些事件。

HTML文檔或元素也稱為DOM對象,DOM是一套Web標準,它定義了訪問HTML文檔對象的一套屬性、方法和事件。DOM實際上是建立網頁與JavaScript語言溝通的橋梁。

JS如何監聽事件?

如果JS需要對DOM對象觸發的事件進行處理,就需要監聽這些事件,瀏覽器會自動調用監聽事件的JS函數。

JS有三種監聽事件的方式:分別是內聯屬性監聽、DOM屬性綁定監聽和使用事件監聽函數。

內聯屬性監聽

內聯屬性監聽是在編寫HTML元素代碼時,直接寫入元素的事件屬性,事件屬性值為JS函數或JS代碼。

案例8:使用jQuery庫的網頁代碼(案例代碼見unit12\case1.html):

<html><head><title>JavaScript開發案例</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript"> function add(){ num1 = parseInt(document.getElementById("op1").value); num2 = parseInt(document.getElementById("op2").value); alert(sum(num1,num2)); } function sum(a,b){ return a+b; }</script></head><body><h3>JavaScript開發案例</h3><hr><p> 加數:<input type="text" id="op1" name="op1" maxlength="20" value=""/></p><p> 加數:<input type="text" id="op2" name="op2" maxlength="10" value=""/></p><p><input type="button" value="加法" onclick="add()"/></p></boyd><html>

在上面的案例代碼中,HTML元素button事件屬性onclick的值為JS函數add(),add()函數在script標籤內定義。事件屬性onclick為用戶使用滑鼠單擊元素觸發的事件名稱,button元素onclick屬性的值為add()函數,當用戶使用滑鼠單擊button元素時,瀏覽器會調用add()函數對該事件進行處理。

DOM屬性綁定

DOM是網頁編程接口,也稱為文檔對象模型,它可以被JS調用,用來動態操作或修改網頁元素的內容。

DOM將HTML文檔作為一個樹形結構,網頁文檔中的元素都是樹結構的節點,每個節點都是一個DOM對象,每個DOM對象都有事件屬性,將JS函數賦值給DOM對象的事件屬性,就將DOM觸發的事件和JS函數綁定起來,當DOM事件觸發後,瀏覽器會調用被綁定的JS函數。

<html><head><title>JavaScript開發案例</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript"> // 網頁加載完成後,onload事件被觸發 window.onload=function (){ // 通過元素id屬性獲取元素對象 button_add = document.getElementById("id_add") // 對象的onclick屬性綁定add函數 button_add.onclick = add button_mul = document.getElementById("id_mul") // 可以直接定義函數綁定到對象的onclick button_mul.onclick = function(event) { num1 = parseInt(document.getElementById("op1").value); num2 = parseInt(document.getElementById("op2").value); alert(num1*num2); } } function add(){ num1 = parseInt(document.getElementById("op1").value); num2 = parseInt(document.getElementById("op2").value); alert(sum(num1,num2)); } function sum(a,b){ return a+b; }</script></head><body><h3>JavaScript開發案例</h3><hr><p> 加數:<input type="text" id="op1" name="op1" maxlength="20" value=""/></p><p> 加數:<input type="text" id="op2" name="op2" maxlength="10" value=""/></p><p><input type="button" id="id_add" value="加法"/></p> <p><input type="button" id="id_mul" value="乘法"/></p></boyd><html>

案例代碼中,onload是windows對象(windows是DOM的窗口對象,表示瀏覽器窗口)屬性,該屬性為網頁加載完成事件,該屬性綁定了處理事件的匿名JS函數。

在onload事件處理函數體內,應用document對象(DOM的文檔對象)的getElementById()獲取button對象,然後綁定button對象的onclick事件處理函數,其中button_add對象綁定了add()函數,button_mul對象綁定了匿名函數。

使用事件監聽函數

該監聽方式是HTML元素對象調用addEventListener()方法,來綁定事件的處理函數。具體使用方法如下:

addEventListener(event, function, useCapture)

參數event是要綁定的對象事件屬性名稱,event是字符串類型。注意:事件名稱不使用"on"前綴,用"click"而不是"onclick"。

參數function是要綁定的函數,也稱為回調函數,當對象事件觸發時,該函數被調用,function可以是已定義的函數名稱,也可以直接定義匿名函數。

參數useCapture是可選參數,類型是布爾類型,設置事件是否在捕獲或冒泡階段執行。該參數主要是設置事件的執行順序,當多個對象元素疊加在窗口的同一區域,若滑鼠單擊多個對象的共同區域時,捕獲階段的事件執行順序是從大到小,冒泡階段的執行順序是從小到大。

useCapture若設置為true,事件處理在捕獲階段執行;useCapture若設置為false,事件處理在冒泡階段執行。默認為false。

<html><head><title>JavaScript開發案例</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript"> // 網頁加載完成後,onload事件被觸發 window.onload=function (){ // 通過元素id屬性獲取元素對象 button_add = document.getElementById("id_add") // 調用對象的addEventListener方法綁定事件處理函數 // 參數function為已定義的函數名稱 button_add.addEventListener("click",add) button_mul = document.getElementById("id_mul") // 調用對象的addEventListener方法綁定事件處理函數 // 參數function為直接定義的匿名函數 button_mul.addEventListener("click", function(){ num1 = parseInt(document.getElementById("op1").value); num2 = parseInt(document.getElementById("op2").value); alert(num1*num2); }) } function add(){ num1 = parseInt(document.getElementById("op1").value); num2 = parseInt(document.getElementById("op2").value); alert(sum(num1,num2)); } function sum(a,b){ return a+b; }</script></head><body><h3>JavaScript開發案例</h3><hr><p> 加數:<input type="text" id="op1" name="op1" maxlength="20" value=""/></p><p> 加數:<input type="text" id="op2" name="op2" maxlength="10" value=""/></p><p><input type="button" id="id_add" value="加法"/></p> <p><input type="button" id="id_mul" value="乘法"/></p></boyd><html>

JS支持的事件

JS可以處理的DOM對象觸發的事件類型如下表所示:

相關焦點

  • 七天學會javascript第一天javascript介紹
    前幾周寫了幾篇關於入門php的文章,反響還不錯,之前簡單的提到了JavaScript,這周小編重點介紹JavaScript讓大家可以在一周時間內掌握這門前端語言的基本用法。javascript介紹javascript數據類型javascript運算符javascript對象javascript Date對象javascript String對象JavaScript常用於實現一些前端效果。前些年流行的flash已經慢慢的被淘汰,js盛行起來。javascript :客戶端編程。javascript是由客戶端去解釋運行的。
  • 一天一點JavaScript編程知識:Animation動畫
    前言總算是寫完了基礎類型篇的內容。這次咱們來聊一聊動畫。閒話就不多扯了,直接開始正文。PS:供複製的代碼,但是請注意,圖片資源需要調整一下<html> <head> <title>JavaScript Animation</title> <script type = "text/javascript"> var imgObj = null; function init() { imgObj
  • 從setTimeout(fn,0)函數剖析JavaScript的執行機制
    這就涉及到JavaScript的執行機制了,通過這篇文件,你將會對JavaScript的整個執行機制更加深刻了解。javascript 引擎線程:也可以稱為 JS 內核,主要負責處理 Javascript 腳本程序,例如 V8 引擎。Javascript 引擎線程理所當然是負責解析 Javascript 腳本,運行代碼。瀏覽器無論什麼時候都只有一個 JS 線程在運行 JS 程序。
  • 在JavaScript中,使用replace()、test()和exec()方法匹配字符串
    JavaScript核心代碼如下:<script type="text/javascript">var str = "Hello Microsoft!"使用字符串替換的核心JavaScript代碼如下:<script type="text/javascript">var str = "一都編程,每個知識就是一個案例。"
  • 50個實用的JavaScript工具
    qooxdoo具有客戶端瀏覽器檢測功能,具有瀏覽器抽象層,可以無差別的創建跨瀏覽器的Web應用程式,它提供方便的調試接口,具有事件管理、聚焦管理、定時器、邊框和對象屬性等特徵。它提供一組窗體組件並擴展了布局,它還提供跨平臺的png圖形透明支持功能。此外,qooxdoo提供一個原子組件,你可以在其基礎上開發你自己的組件。
  • AJAXRPC: javascript調用服務端方法
    同步調用 <script type="text/javascript">......try{ var obj = Test.sayHello('world!'); ......}catch(e){ //e.error 錯誤碼 //e.message 錯誤描述}......
  • JavaScript入門教程
    起源javascript前身叫做livescript,sun公司推出java,netspace公司引進java的概念,重新設計livescript,並更名javascript。發明者,布蘭登.艾克,表單驗證原先要經過伺服器,伺服器壓力大,等待時間長,js僅在客戶端就可完成。是什麼是一種腳本語言,是一種輕量級的程式語言。
  • 第八篇:jQuery的使用及元素選擇器
    jQuery提供的HTML選擇器,可以方便地選擇網頁文檔的任何HTML元素;jQuery允許把一系列的DOM操作像鏈條一樣連續寫出來;jQuery封裝的事件處理機制相對JS來說更易於操作;jQuery提供的Ajax技術可以簡化Ajax的調用。總之一句話,使用jQuery極大提高了開發者編寫網站代碼的效率。
  • JavaScript - Math對象
    中其實是有很多數學計算的需求的,不過不必擔心系統給我們提供了大量的數學運算的方法供我們使用而這些方法全都存在於我們的Math對象中Math常用的屬性:Math.PI 相當於π 3.14159Math對象常用的函數:1.Math.round() 四捨五入舉個小例子:<script type = 「text/javascript
  • 第二篇:輕鬆掌握JS函數
    <html><head><title>JavaScript開發案例</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript"> function add(){
  • javascript在自動化測試項目中的應用「軟體測試開發入門教程」
    比如說我今天分享的主題是javascript在自動化測試中的應用有些朋友說我之前講的自動化測試的東西,需要消化很久,有一定的難度,意思就是說我動不動就講測試框架,測試開發是不是會有這樣的感覺?比如今天分享的javascript,大家做軟體測試有沒有用過?
  • 分享幾個javascript實用函數
    從本文開始小編將定期發布javascript相關的代碼集錦,每次發十個與大家分享,首先是數組篇,也許有人會說,可以用常用的lodash的等庫啊。但是小編覺得,去讀lodash源碼的人並不多吧,所以分享的代碼集錦權當一種學習了,首先開始的是數組篇,基於es6 規範allallEqual找出數組中滿足篩洗條件中的所有元素.any// 找出數組中滿足篩洗條件中的所有元素.
  • 使用HTML5和Javascript設計繪圖程序
    然後利用excanvas.js這個專門為IE擴展的canvas元素包中提供的處理方法initElement進行相應的判斷處理,即:  if(typeof G_vmlCanvasManager !這裡我們要對4個滑鼠的相關事件進行編碼,並且要編寫兩個相關的方法addClick和redraw。addClick方法記錄滑鼠移動的點,而redraw方法則將已記錄的數據點在canvas畫布中繪畫出來。
  • Javascript去除字符串中的點或其他符號
    在前端上使用javascript進行操作的。測試了兩次沒有好用,程序直接把整個字符串都進行了替換,在考慮這個是為什麼呢?javascript(請忽略此配圖)示例var ip = data.field.ip.replace(/.
  • 什麼是javascript?javascript需要學哪些內容?這篇文章告訴你!
    剩餘可以是任意字母,美元符號,下劃線和數字(3)不能使用javascript中的關鍵字(保留字)來命名變量(4)中文也可以聲明變量,不建議使用它。
  • 第三篇:JavaScript語句流程控制
    若程序不需要處理條件表達式返回假值的情況,else部分可以省略。if(條件表達式) {代碼段1}上面的條件結構只處理條件表達式返回真值的情況。多重條件結構在一些情況下,需要檢查多個條件,解決這種情況可用多重if、嵌套if或switch結構來解決。
  • JavaScript中的「黑話」
    true:false;const enable3 =Boolean(id);~ 與 ~~~表示按位取反,~5的運行步驟為:轉為一個字節的二進位表示:00000101,按位取反:11111010取其反碼:10000101取其補碼:10000110轉化為十進位:-6至於原碼、反碼、補碼原理請看原理篇。
  • 第五節 食物中毒調查處理
    第五節 食物中毒調查處理   一旦發生食物中毒事件,應及時進行認真調查,查明原因,提出改進措施,以免同類事件再次發生。   三、現場處理   確定食中毒類型後,針對原因立即對現場進行處理,以防止事件擴大蔓延:①銷毀引起中毒的食物;②針對汙染原因及時督促改進;有傳染病的炊事人員應暫時調離飲食服務工作,制定和完善衛生管理制度;③指導現場消毒。
  • 什麼是JavaScript對象?如何創建並引用?這就告訴你!
    2.3 創建對象a.直接使用大括號創建對象b.使用new命令生成一個Object對象的實例c.使用Object.create方法創建對象var obj1 = {};var obj2 = new Object();var obj3 = Object.create(null);Object是在javascript
  • 【第1162期】2018 要學習的優秀 JavaScript 庫與知識
    前言關於2017年回顧的文章,也曾分享過幾篇了,當看到這篇的時候想去找找看在2017年初的時候有沒分享過2017值得學習的庫,可惜翻看了只有講到前端工具的趨勢