Web API中的Event
一、Event是什麼?
Event是事件介面,可以通過這個介面建立事件,並把它分配給目標元素。結構上的重疊,事件處理函式可能會依次被觸發,觸發的順序取決於事件冒泡和事件捕獲在每一個元素上的設定情況。
1.建立和觸發自定義事件
通過構造器Event建立了一個build事件,使用dispatchEvent將事件分配給elem元素,並監聽事件。
<body>
<div id = "container" style="height: 100px;width: 100px;background-color: black;">
</div>
<script>
const event = new Event('build');
const elem = document.getElementById('container')
// Listen for the event.
elem.addEventListener('build', function () {console.log('this is build')}, false);
// Dispatch the event.
elem.dispatchEvent(event);
</script>
</body>
通過CustomEvent建立事件,可以新增更多自定義資訊
const event2 = new CustomEvent('build2', { detail: {myData:"hello"}});
function eventHandler(e) {
console.log('My data is: ' + e.detail.myData);
}
elem.addEventListener('build2', eventHandler)
elem.dispatchEvent(event2);
執行結果
二、事件冒泡和事件捕獲
1.產生原因
因為元素的巢狀,結構上重疊,事件可能會依次被觸發,觸發的順序取決於事件冒泡和事件捕獲在每一個元素上的設定情況。
2.事件冒泡
希望從子元素觸發事件,並讓祖先捕獲該事件,順序是由子到父。
使用:event.bubbles = true | false
將eventAwesome事件分發給textArea,其父元素Form能監聽eventAwesome。
<body>
<form>
<textarea></textarea>
</form>
<script type="text/javascript" language="javascript">
const form = document.querySelector('form');
const textarea = document.querySelector('textarea');
// Create a new event, allow bubbling, and provide any data you want to pass to the "detail" property
const eventAwesome = new CustomEvent('awesome', {
bubbles: true,
detail: { text: () => textarea.value }
});
// The form element listens for the custom "awesome" event
// and then consoles the output of the passed text() method
// e指的是eventAwesome事件
form.addEventListener('awesome', e => console.log(e.detail.text()));
// As the user types, the textarea inside the form dispatches/triggers the event to fire,
// and uses itself as the starting point
//e指的是input事件 e.target = <textarea></textarea>
textarea.addEventListener('input', e => {e.target.dispatchEvent(eventAwesome);console.log(e.target)});
</script>
</body>
3.事件委託
如果需要實現這樣一個需求:點選li標籤(li標籤數量會改變),並顯示其內容,該如何高效的進行事件繫結?
可以將事件繫結在li的父元素ul標籤上,通過e.target獲得具體的li標籤。每次點選li標籤,其父元素ul標籤都會監聽到並執行hide函式。
<script>
// Make a list
var ul = document.createElement('ul');
document.body.appendChild(ul);
var li1 = document.createElement('li');
var li2 = document.createElement('li');
ul.appendChild(li1);
ul.appendChild(li2);
function hide(e) {
// e.target 引用著 <li> 元素
// 不像 e.currentTarget 引用著其父級的 <ul> 元素.
e.target.style.visibility = 'hidden';
}
// 新增監聽事件到列表,當每個 <li> 被點選的時候都會觸發。
ul.addEventListener('click', hide);
</script>
總結
本文僅僅簡單介紹Event的使用,具體的可以參考:Event——Web API介面
相關文章
- JavaScript中的composition eventJavaScript
- node中的Event LoopOOP
- 在Scala中構建Web API的4大框架WebAPI框架
- IoC在ASP.NET Web API中的應用ASP.NETWebAPI
- 像Event Emitter一樣使用Web WorkerMITWeb
- 筆記:API 和 Web API筆記APIWeb
- Web Audio APIWebAPI
- [譯]理解js中的event loopJSOOP
- Node.js 中的 Event loopNode.jsOOP
- 瀏覽器中的Event Loop瀏覽器OOP
- 淺析 JS 中的 Event LoopJSOOP
- node中的事件環(Event Loop)事件OOP
- JS中event事件JS事件
- Laravel 中的 Event 和事件的概念Laravel事件
- Web API的簡史介紹WebAPI
- 【譯】Node.js中的Event LoopNode.jsOOP
- nodejs中的事件迴圈 - Event LoopNodeJS事件OOP
- MySQL中的事件排程器EVENTMySql事件
- 理解JS中的Event Loop機制JSOOP
- Spring中的事件講解(Application Event)Spring事件APP
- js中事件物件eventJS事件物件
- 白宮Web API的指南和示例WebAPI
- 你(可能)不知道的web apiWebAPI
- Web Storage API的介紹和使用WebAPI
- golang-event在以太坊中的使用Golang
- Javascript中的執行機制——Event LoopJavaScriptOOP
- 讓ASP.NET Web API的Action方法ASP.NETWebAPI
- 支付處理器 API :將你的支付應用帶到 Web 中來APIWeb
- JavaScript Sanitizer API:原生WEB安全API出現啦JavaScriptAPIWeb
- web api 、webservice 跨域等WebAPI跨域
- Entitas 中的Event 新增一個分數控制
- Python win32api.keybd_event模擬鍵盤輸入PythonWin32API
- Dynamics 365 Web API Set Values of all Data Types using Web API in Dynamics CRM Through C#WebAPIC#
- 瀏覽器的event loop和node的event loop瀏覽器OOP
- VUE 中 MVVM – step7 – EventVueMVVM
- 不要在nodejs中阻塞event loopNodeJSOOP
- event_x ()、event_y ()、event_x_root ()、event_y_root ()
- [譯] 模組化系統中的 event.stopPropagation()