對js事件委託的瞭解
事件委託,顧名思義就是本事應該發生在a身上的事件,委託給b來執行。使用該技術能讓你避免對特定的每個節點新增事件監聽器;相反,事件監聽器被新增在他們的父元素上,事件監聽器會分析從子元素上冒泡上來的事件,並找到是哪個子元素事件。
通俗來講: 事件有:onclick、onmouseover、onmouseout等等;委託呢,就是讓別人來做,這件事情本身是加在元素上,然而你卻載入別人身上來做,完成事件;
原理:
利用冒泡原理,將事件加在父級上觸發,執行效果;
好處:
提高效能
新新增元素,可以直接擁有事件;
使用情景:
為DOM中的很多元素繫結相同事件;
為DOM中尚不存在的元素繫結事件;
js一般寫法:
window.onload = function(){
var oUl = document.getElementById('ul');
var aLi = oUl.getElementsByTagName('li');
for(var i=0; i<aLi.length; i++){
aLi[i].onmouseover = function(){
this.style.background = 'red';
}
aLi[i].onmouseout = function(){
this.style.background = '#fff';
}
}
}
事件委託的js寫法:
window.onload = function(){
var oUl = document.getElementById('ul');
var aLi = oUl.getElementsByTagName('li');
/*這裡用到事件源:event物件, 事件源,不管在哪個事件中,只要你操作的那個元素就是事件源
ie: window.event.srcElent
標準下: event.target
nodeName: 找到元素的標籤名;
*/
oUl.onmouseover = function(ev) {
var ev = ev||window.event;
var target = ev.target || ev.srcElement;
if(target.nodeName.toLowerCase() == "li"){
target.style.background = 'red';
}
}
oUl.onmouseout = function(ev) {
var ev = ev || window.event;
var target = ev.target|| ev.srcElement;
if(target.nodeName.toLowerCase() == 'li'){
target.style.background = ' #fff';
}
}
}
事件委託的jq寫法
$(function(){
$("#ul").on('click','li',function(){
if(!$(this).attr('s')){
$(this).css('background','red');
$(this).attr('s',true);
}else{
$(this).css('background','#fff');
$(this).removeAttr('s');
}
})
})
demo
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul id="ul">
<li>這是第一個</li>
<li>這是第二個</li>
<li>這是第三個</li>
</ul>
<script>
window.onload = function(){
var oUl = document.getElementById('ul');
var aLi = oUl.getElementsByTagName('li');
/*這裡用到事件源:event物件, 事件源,不管在哪個事件中,只要你操作的那個元素就是事件源
ie: window.event.srcElent
標準下: event.target
nodeName: 找到元素的標籤名;
*/
oUl.onmouseover = function(ev) {
var ev = ev||window.event;
var target = ev.target || ev.srcElement;
console.log(ev);
console.log(this);
if(target.nodeName.toLowerCase() == "li"){
target.style.background = 'red';
}
}
oUl.onmouseout = function(ev) {
var ev = ev || window.event;
var target = ev.target|| ev.srcElement;
if(target.nodeName.toLowerCase() == 'li'){
target.style.background = '#fff';
}
}
}
</script>
</body>
</html>
文章由https://www.cnblogs.com/yc8930143/p/7270003.html更改而來,尊重作者的辛苦,在此說明
相關文章
- 委託與事件-委託詳解(一)事件
- Js 事件原理與事件委託JS事件
- JS事件流和事件委託JS事件
- js 事件的冒泡和委託JS事件
- JavaScript 事件委託詳解JavaScript事件
- js--事件流、事件委託、事件階段JS事件
- 事件委託事件
- 委託與事件-事件詳解(二)事件
- 委託、事件--委託例項篇事件
- jQuery 事件委託jQuery事件
- js事件委託原理簡單介紹JS事件
- 事件模型和事件委託事件模型
- 事件委託詳解最新版事件
- 詳解C#委託與事件C#事件
- 委託初步瞭解(程式碼段展示)
- C# 事件委託C#事件
- C#事件委託事件
- 重中之重:委託與事件事件
- C# 委託事件C#事件
- wpf移除事件委託事件
- 委託、Lambda表示式、事件系列01,委託是什麼,委託的基本用法,委託的Method和Target屬性事件
- 詳解C#委託和事件(一)C#事件
- 詳解C#委託和事件(二)C#事件
- 事件的捕獲、冒泡、委託事件
- javascript中的事件委託(代理)JavaScript事件
- jquery-中的事件委託jQuery事件
- Zepto事件委託的小坑事件
- 委託、Lambda表示式、事件系列07,使用EventHandler委託事件
- 委託、Lambda表示式、事件系列04,委託鏈是怎樣形成的, 多播委託, 呼叫委託鏈方法,委託鏈異常處理事件
- JQuery7:事件委託jQuery事件
- C#委託與事件C#事件
- C# 事件 vs 委託C#事件
- C# - 委託與事件C#事件
- c# 委託和事件C#事件
- 事件委託---動態建立的元素新增事件事件
- JavaScript 事件委託詳解 | 掘金技術徵文JavaScript事件
- JavaScript事件委託的技術原理JavaScript事件
- C# 中的委託和事件C#事件