Rumah hujung hadapan web tutorial js 浅析js的事件绑定&事件监听&事件委托的之间内容

浅析js的事件绑定&事件监听&事件委托的之间内容

Aug 23, 2018 pm 03:01 PM
delegasi acara mendengar acara mengikat acara

本篇文章给大家带来的内容是关于浅析js的事件绑定&事件监听&事件委托的之间内容,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、事件绑定
要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数。所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称。
有三种常用的绑定事件的方法:
(1)在DOM中直接绑定事件
我们可以在DOM元素上绑定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick、onkeydown、onkeypress、onkeyup等。

<input type="button" value="click me" onclick="hello()"><script>
function hello(){
    alert("hello world!");
}
</script>
Salin selepas log masuk

(2)在JavaScript代码中绑定事件
在JavaScript代码中(即 script 标签内)绑定事件可以使JavaScript代码与HTML标签分离,文档结构清晰,便于管理和开发。

<input type="button" value="click me" id="btn"><script>
document.getElementById("btn").onclick = function(){
    alert("hello world!");
}
</script>
Salin selepas log masuk

(3)使用事件监听绑定事件
绑定事件的另一种方法是用 addEventListener() 或 attachEvent() 来绑定事件监听函数。
事件监听
关于事件监听,W3C规范中定义了3个事件阶段,依次是捕获阶段、目标阶段、冒泡阶段。
W3C规范

element.addEventListener(event, function, useCapture)
Salin selepas log masuk

event : (必需)事件名,支持所有 DOM事件 。
function:(必需)指定要事件触发时执行的函数。
useCapture:(可选)指定事件是否在捕获或冒泡阶段执行。true,捕获。false,冒泡。默认false。

<input type="button" value="click me" id="btn1"><script>
document.getElementById("btn1").addEventListener("click",hello);
function hello(){
    alert("hello world!");
}
</script>
Salin selepas log masuk

IE标准

element.attachEvent(event, function)
Salin selepas log masuk

event:(必需)事件类型。需加“on“,例如:onclick。
function:(必需)指定要事件触发时执行的函数。

<input type="button" value="click me" id="btn2"><script>
document.getElementById("btn2").attachEvent("onclick",hello);
function hello(){
    alert("hello world!");
}
</script>
Salin selepas log masuk

事件监听的优点
1、可以绑定多个事件。
常规的事件绑定只执行最后绑定的事件。而事件监听可以执行多个函数。

<input type="button" value="click me" id="btn4"><script>
var btn4 = document.getElementById("btn4");
btn4.addEventListener("click",hello1);
btn4.addEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
Salin selepas log masuk

2、可以解除相应的绑定

<input type="button" value="click me" id="btn5"><script>
var btn5 = document.getElementById("btn5");
btn5.addEventListener("click",hello1);//执行了
btn5.addEventListener("click",hello2);//不执行
btn5.removeEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
Salin selepas log masuk

封装事件监听

<input type="button" value="click me" id="btn5">//绑定监听事件
function addEventHandler(target,type,fn){
    if(target.addEventListener){
        target.addEventListener(type,fn);
    }else{
        target.attachEvent("on"+type,fn);
    }
}//移除监听事件
function removeEventHandler(target,type,fn){
    if(target.removeEventListener){
        target.removeEventListener(type,fn);
    }else{
        target.detachEvent("on"+type,fn);
    }
}
Salin selepas log masuk

事件捕获:事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。
事件冒泡:是自下而上的去触发事件。绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡。

<p id="parent">
  <p id="child" class="child"></p>
</p>

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+this.id);
            })
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+this.id)
            })

child事件被触发,child
parent事件被触发,parent
Salin selepas log masuk

结论:先child,然后parent。事件的触发顺序自内向外,这就是事件冒泡。
现在改变第三个参数的值为true:

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+e.target.id);
            },true)
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+e.target.id)
            },true)parent事件被触发,parentchild事件被触发,child
Salin selepas log masuk

结论:先parent,然后child。事件触发顺序变更为自外向内,这就是事件捕获。

阻止事件冒泡,阻止默认事件
event.stopPropagation()方法:这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开。
event.preventDefault()方法:这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素
return false:这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()

2.事件委托
事件委托就是利用冒泡的原理,把事件加到父元素或祖先元素上,触发执行效果。

<input type="button" value="click me" id="btn6">
var btn6 = document.getElementById("btn6");
document.onclick = function(event){    
event = event || window.event;    
var target = event.target || event.srcElement;    
if(target == btn6){
        alert(btn5.value);
    }
}
Salin selepas log masuk

事件委托优点
1、提高JavaScript性能。事件委托可以显著的提高事件的处理速度,减少内存的占用

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>
  var item1 = document.getElementById("item1");
  var item2 = document.getElementById("item2");
  var item3 = document.getElementById("item3");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target == item1){
        alert("hello item1");
    }else if(target == item2){
        alert("hello item2");
    }else if(target == item3){
        alert("hello item3");
    }
})</script>
Salin selepas log masuk

2、动态的添加DOM元素,不需要因为元素的改动而修改事件绑定。

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>var list = document.getElementById("list");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target.nodeName == "LI"){
        alert(target.innerHTML);
    }
})
var node=document.createElement("li");
var textnode=document.createTextNode("item4");
node.appendChild(textnode);
list.appendChild(node);
</script>
Salin selepas log masuk

  相关推荐:

浅谈jquery之on()绑定事件和off()解除绑定事件

浅谈JavaScript事件绑定的常用方法及其优缺点分析

Atas ialah kandungan terperinci 浅析js的事件绑定&事件监听&事件委托的之间内容. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

jquery绑定事件有几种方式? jquery绑定事件有几种方式? Nov 09, 2020 pm 03:30 PM

jquery绑定事件有4种方式,分别为:bind()、live()、delegate()和on()方法;其中bind()方法只能针对已经存在的元素进行事件的绑定,而live()、on()、delegate()均支持未来新添加元素的事件绑定。

Selesaikan masalah ralat UniApp: acara 'xxx' tidak terikat Selesaikan masalah ralat UniApp: acara 'xxx' tidak terikat Nov 25, 2023 am 10:56 AM

Apabila membangunkan aplikasi menggunakan UniApp, anda mungkin menghadapi mesej ralat berikut: acara 'xxx' tidak terikat. Ini disebabkan oleh mekanisme mengikat acara UniApp, yang perlu ditetapkan dengan betul untuk menyelesaikan masalah ini. 1. Punca masalah Dalam UniApp, pengikatan peristiwa komponen halaman diselesaikan melalui arahan v-on. Contohnya, tambahkan komponen butang pada templat: &lt;button@click="onClick"&gt;Click Me&lt;/butto

Cara berkesan menghalang peristiwa daripada menggelegak Cara berkesan menghalang peristiwa daripada menggelegak Feb 19, 2024 pm 08:25 PM

Cara mencegah peristiwa menggelegak dengan berkesan memerlukan contoh kod acara yang menggelegak bermakna apabila peristiwa pada elemen dicetuskan, elemen induk juga akan menerima pencetus peristiwa yang sama ini kadangkala membawa masalah kepada pembangunan web perlu belajar cara menghentikan acara daripada menggelegak dengan berkesan. Dalam JavaScript, kita boleh menghentikan acara daripada menggelegak dengan menggunakan kaedah stopPropagation() bagi objek acara. Kaedah ini boleh dipanggil dalam pengendali acara untuk menghentikan acara daripada menyebar ke elemen induk.

Laksanakan fungsi pemantauan acara peta menggunakan JavaScript dan Peta Tencent Laksanakan fungsi pemantauan acara peta menggunakan JavaScript dan Peta Tencent Nov 21, 2023 pm 04:10 PM

Maaf, tetapi saya tidak dapat memberikan anda contoh kod yang lengkap. Walau bagaimanapun, saya boleh memberikan anda idea asas dan contoh coretan kod untuk rujukan. Berikut ialah contoh mudah untuk menggabungkan JavaScript dan Tencent Map untuk melaksanakan fungsi pemantauan acara peta: //Memperkenalkan API Tencent Map constscript=document.createElement('script');script.src='https://map.

Apakah fungsi acara mengikat jquery Apakah fungsi acara mengikat jquery Mar 20, 2023 am 10:52 AM

Fungsi peristiwa mengikat jquery: Mengikat peristiwa biasa ke nod DOM Apabila nod DOM dipilih, mengikat peristiwa itu untuk memudahkan pengguna menyediakan operasi yang sepadan. jQuery menyediakan empat kaedah mengikat peristiwa, iaitu mengikat, hidup, mewakilkan dan hidup, dan fungsi nyah dengar yang sepadan ialah nyahikat, mati, nyahdelegasikan dan dimatikan.

Bagaimana untuk menambah acara pada elemen? Tiga cara untuk menghuraikan peristiwa mengikat JS Bagaimana untuk menambah acara pada elemen? Tiga cara untuk menghuraikan peristiwa mengikat JS Aug 04, 2022 pm 07:27 PM

Sebagai bahasa skrip, JavaScript boleh mengikat acara pada elemen pada halaman, supaya apabila peristiwa tertentu berlaku, pengendali acara yang sepadan boleh dipanggil secara automatik untuk mengendalikan acara tersebut. Jadi bagaimana untuk menambah acara pada elemen? Artikel berikut akan memperkenalkan kepada anda tiga cara untuk mengikat acara dalam JS Saya harap ia akan membantu anda!

Perbincangan mendalam tentang teknologi mengikat acara jQuery Perbincangan mendalam tentang teknologi mengikat acara jQuery Feb 26, 2024 pm 07:36 PM

jQuery ialah perpustakaan JavaScript popular yang digunakan secara meluas untuk mengendalikan interaktiviti dalam halaman web. Antaranya, pengikatan peristiwa adalah salah satu fungsi penting jQuery Melalui pengikatan peristiwa, respons kepada interaksi pengguna boleh dicapai. Artikel ini akan meneroka teknologi mengikat acara jQuery dan memberikan contoh kod khusus. 1. Konsep asas pengikatan peristiwa Pengikatan peristiwa merujuk kepada menambahkan pendengar peristiwa pada elemen DOM untuk melaksanakan operasi tertentu apabila peristiwa tertentu berlaku. Dalam jQuery, pilih yang dikehendaki

Apakah yang perlu saya lakukan jika pengikatan acara 'klik' tidak sah dalam aplikasi Vue saya? Apakah yang perlu saya lakukan jika pengikatan acara 'klik' tidak sah dalam aplikasi Vue saya? Jun 24, 2023 pm 03:51 PM

Vue ialah rangka kerja JavaScript yang popular untuk membina aplikasi web moden. Dalam Vue, kami biasanya menggunakan arahan untuk mengendalikan elemen DOM. Antaranya, acara "klik" adalah salah satu arahan yang biasa digunakan Walau bagaimanapun, dalam aplikasi Vue, kami sering menghadapi situasi di mana pengikatan acara "klik" tidak sah. Artikel ini menerangkan cara menyelesaikan masalah ini. Langkah pertama dalam menyemak sama ada unsur wujud adalah untuk mengesahkan sama ada unsur yang anda ingin ikat acara "klik" wujud. Jika unsur itu tidak wujud,

See all articles