HTML 事件是發(fā)生在 HTML 元素上的事情。
當(dāng)在 HTML 頁面中使用 JavaScript 時, JavaScript 可以觸發(fā)這些事件。
HTML 事件
HTML 事件可以是瀏覽器行為,也可以是用戶行為。
以下是 HTML 事件的實例:
HTML 頁面完成加載
HTML input 字段改變時
HTML 按鈕被點擊
通常,當(dāng)事件發(fā)生時,你可以做些事情。
在事件觸發(fā)時 JavaScript 可以執(zhí)行一些代碼。
HTML 元素中可以添加事件屬性,使用 JavaScript 代碼來添加 HTML 元素。
單引號:
<some-HTML-element some-event='some JavaScript'>
雙引號:
<some-HTML-element some-event="some JavaScript">
在以下實例中,按鈕元素中添加了 onclick 屬性 (并加上代碼):
實例
<button onclick='getElementById("demo").innerHTML=Date()'>現(xiàn)在的時間是??</button>
以上實例中,JavaScript 代碼將修改 id="demo" 元素的內(nèi)容。
在下一個實例中,代碼將修改自身元素的內(nèi)容 (使用 this.innerHTML):
實例
<button onclick="this.innerHTML=Date()">現(xiàn)在的時間是?</button>
JavaScript代碼通常是幾行代碼。比較常見的是通過事件屬性來調(diào)用: |
實例
<button onclick="displayDate()">現(xiàn)在的時間是?</button>
常見的HTML事件
下面是一些常見的HTML事件的列表:
事件 | 描述 |
---|---|
onchange | HTML 元素改變 |
onclick | 用戶點擊 HTML 元素 |
onmouseover | 用戶在一個HTML元素上移動鼠標(biāo) |
onmouseout | 用戶從一個HTML元素上移開鼠標(biāo) |
onkeydown | 用戶按下鍵盤按鍵 |
onload | 瀏覽器已完成頁面的加載 |
更多事件列表: JavaScript 參考手冊 - HTML DOM 事件。
JavaScript 可以做什么?
事件可以用于處理表單驗證,用戶輸入,用戶行為及瀏覽器動作:
頁面加載時觸發(fā)事件
頁面關(guān)閉時觸發(fā)事件
用戶點擊按鈕執(zhí)行動作
驗證用戶輸入內(nèi)容的合法性
等等 ...
可以使用多種方法來執(zhí)行 JavaScript 事件代碼:
HTML 事件屬性可以直接執(zhí)行 JavaScript 代碼
HTML 事件屬性可以調(diào)用 JavaScript 函數(shù)
你可以為 HTML 元素指定自己的事件處理程序
你可以阻止事件的發(fā)生。
等等 ...
在 HTML DOM 章節(jié)中你將會學(xué)到更多關(guān)于事件及事件處理程序的知識。 |
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
avaScript 的 Event Loop(事件循環(huán))是 JavaScript 運行時環(huán)境(如瀏覽器和 Node.js)的核心機制之一,它使得 JavaScript 能夠處理異步操作而不會阻塞程序的執(zhí)行。了解 Event Loop 對于理解 JavaScript 的非阻塞行為和編寫高效的異步代碼至關(guān)重要。
首先,重要的是要理解 JavaScript 是一種單線程的語言。這意味著 JavaScript 在同一時間內(nèi)只能執(zhí)行一個任務(wù)。然而,JavaScript 需要能夠處理各種異步操作(如 AJAX 請求、文件讀取、用戶交互等),這些操作可能會花費很長時間完成。為了解決這個問題,JavaScript 采用了 Event Loop 和 Callback Queues(回調(diào)隊列)。
調(diào)用棧是 JavaScript 代碼執(zhí)行時的數(shù)據(jù)結(jié)構(gòu),用于存儲函數(shù)調(diào)用和返回地址。每當(dāng)一個函數(shù)被調(diào)用時,它就會被推入調(diào)用棧,并在函數(shù)執(zhí)行完畢后從棧中彈出。如果調(diào)用棧滿了(即達到了最大調(diào)用深度),則會發(fā)生棧溢出錯誤。
堆是用于存儲對象、數(shù)組等引用類型的內(nèi)存區(qū)域。與調(diào)用棧不同,堆是動態(tài)分配的,并且其大小不是固定的。
Web APIs 是瀏覽器提供的一組與瀏覽器功能交互的接口,如 DOM 操作、網(wǎng)絡(luò)請求等。這些 API 通常是異步的,并且它們有自己的線程或進程來處理請求。
當(dāng)異步操作完成時(如 AJAX 請求、setTimeout、Promise 解決等),相應(yīng)的回調(diào)函數(shù)會被放入任務(wù)隊列(或稱為宏任務(wù)隊列)或微任務(wù)隊列中。任務(wù)隊列中的任務(wù)在當(dāng)前的執(zhí)行棧清空后才會被執(zhí)行,而微任務(wù)隊列中的任務(wù)會在當(dāng)前執(zhí)行棧清空后、但下一個宏任務(wù)執(zhí)行前立即執(zhí)行。
Event Loop 的工作流程可以概括為以下幾個步驟:
console.log('1');
setTimeout(() => {
console.log('setTimeout 宏任務(wù)隊列');
}, 0);
new Promise((resolve) => {
console.log('Promise 立即執(zhí)行');
resolve();
}).then(() => {
console.log('then 微任務(wù)隊列');
});
console.log('2');
//輸出順序
1
Promise 立即執(zhí)行
2
then 微任務(wù)隊列
setTimeout 宏任務(wù)隊列
解釋:
console.log('1');
setTimeout(() => {
console.log('setTimeout 宏任務(wù)隊列1');
new Promise((resolve) => {
console.log('Promise in setTimeout');
resolve();
}).then(() => {
console.log('then in setTimeout');
});
setTimeout(() => {
console.log('setTimeout 宏任務(wù)隊列2');
}, 0);
}, 0);
new Promise((resolve) => {
console.log('Promise 立即執(zhí)行1');
resolve();
}).then(() => {
console.log('then 微任務(wù)隊列1');
new Promise((resolve) => {
console.log('Promise 立即執(zhí)行2');
resolve();
}).then(() => {
console.log('then 微任務(wù)隊列2');
});
});
console.log('2');
//輸出順序
1
Promise 立即執(zhí)行1
2
then 微任務(wù)隊列1
Promise 立即執(zhí)行2
then 微任務(wù)隊列2
setTimeout 宏任務(wù)隊列1
Promise in setTimeout
then in setTimeout
setTimeout 宏任務(wù)隊列2
解釋:
const async1= async () => {
console.log('async1 1');
await async2();
console.log('async1 2');
}
const async2= async () => {
console.log('async2');
}
console.log('1');
setTimeout(() => {
console.log('setTimeout 宏任務(wù)隊列');
}, 0);
async1();
new Promise((resolve) => {
console.log('promise 立即執(zhí)行');
resolve();
}).then(() => {
console.log('then 微任務(wù)隊列');
});
console.log('2');
//輸出順序
1
async1 1
async2
promise 立即執(zhí)行
2
async1 2
then 微任務(wù)隊列
setTimeout 宏任務(wù)隊列
解釋:
Event Loop 是 JavaScript 異步編程的基石,它使得 JavaScript 能夠在不阻塞主線程的情況下處理各種異步操作。通過理解 Event Loop 的工作原理,我們可以更加高效地編寫異步代碼,避免潛在的錯誤和性能問題。
例
HTML 兩個列表實例: 一個有序列表 (<ol>) 和 一個無序列表 (<ul>) :
<ol>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ol>
<ul>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul>
瀏覽器支持
目前多數(shù)主流瀏覽器支持 <li>標(biāo)簽。
標(biāo)簽定義及使用說明
<li> 標(biāo)簽定義列表項目。
<li> 標(biāo)簽可用在有序列表(<ol>)、無序列表(<ul>)和菜單列表(<menu>)中。
HTML 4.01 與 HTML5之間的差異
"type" 屬性 在 HTML 4.01 已被廢棄。HTML5 不支持該屬性。
"value" 屬性 在 HTML 4.01 已被廢棄。HTML5 不支持該屬性。
提示和注釋
提示: 請使用 CSS 來定義列表和列表項目的類型。
屬性
屬性 | 值 | 描述 |
---|---|---|
type | 1AaIidiscsquarecircle | HTML5 不支持該屬性。HTML 4.01 已廢棄該屬性。 不贊成使用。請使用樣式取代它。 規(guī)定使用哪種項目符號。 |
value | number | 不贊成使用。請使用樣式取代它。 規(guī)定列表項目的數(shù)字。 |
全局屬性
<li> 標(biāo)簽支持全局屬性,查看完整屬性表 HTML 全局屬性。
事件屬性
<li> 標(biāo)簽支持所有 HTML 事件屬性。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。