`
阅读更多

在JavaScript中,经常会遇到JavaScript的事件机制,例如,事件绑定、事件监听、事件委托(事件代理)等。这些名词是什么意思呢,有什么作用呢?

事件绑定

要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数。所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称。

在JavaScript中,有三种常用的绑定事件的方法:

  1. 在DOM元素中直接绑定;
  2. 在JavaScript代码中绑定;
  3. 绑定事件监听函数。

在DOM中直接绑定事件

我们可以在DOM元素上绑定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick、onkeydown、onkeypress、onkeyup等。好多不一一列出了。如果想知道更多事件类型请查看, DOM事件 。

 

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

 

在JavaScript代码中绑定事件

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

 

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

 

使用事件监听绑定事件

绑定事件的另一种方法是用 addEventListener() 或 attachEvent() 来绑定事件监听函数。下面详细介绍,事件监听。

事件监听

关于事件监听,W3C规范中定义了3个事件阶段,依次是捕获阶段、目标阶段、冒泡阶段。

起初Netscape制定了JavaScript的一套事件驱动机制(即事件捕获)。随即IE也推出了自己的一套事件驱动机制(即事件冒泡)。最后W3C规范了两种事件机制,分为捕获阶段、目标阶段、冒泡阶段。IE8以前IE一直坚持自己的事件机制(前端人员一直头痛的兼容性问题),IE9以后IE也支持了W3C规范。

W3C规范

语法:element.addEventListener(event, function, useCapture)

event : (必需)事件名,支持所有 DOM事件 。

function:(必需)指定要事件触发时执行的函数。

useCapture:(可选)指定事件是否在捕获或冒泡阶段执行。true,捕获。false,冒泡。默认false。

注:IE8以下不支持。

 

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

 

IE标准

语法:

element.attachEvent(event, function)

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>
 

 

事件监听的优点

1、可以绑定多个事件。

 

<input type="button" value="click me" id="btn3">
 
<script>
var btn3 = document.getElementById("btn3");
btn3.onclick = function(){
 alert("hello 1"); //不执行
}
btn3.onclick = function(){
 alert("hello 2"); //执行
}
</script>
 

 

常规的事件绑定只执行最后绑定的事件。

 

<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>
 

 

两个事件都执行了。

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>

 

封装事件监听

<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);
 }
}
 
//测试
var btn5 = document.getElementById("btn5");
addEventHandler(btn5,"click",hello1);//添加事件hello1
addEventHandler(btn5,"click",hello2);//添加事件hello2
removeEventHandler(btn5,"click",hello1);//移除事件hello1

 

分享到:
评论

相关推荐

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

    JavaScript事件绑定是网页交互的核心部分,它允许开发者在用户与页面元素交互时执行特定的代码。本文将探讨三种常见的JavaScript事件绑定方法:传统方式、W3C标准方式以及Internet Explorer (IE)方式,并分析它们...

    浅谈JavaScript之事件绑定

    JavaScript事件绑定是网页交互的核心部分,它允许用户与页面元素进行互动。本文将深入探讨JavaScript事件绑定的概念,以及如何处理常见的问题和优化策略。 首先,我们来看一个基础的事件绑定示例。在给出的HTML结构...

    浅谈jQuery事件绑定原理

    当给dom用jq的方法绑定了事件,会生成对应的时间列表 可以看下面的例子(请在firefox中查看 因为firefox中对象支持toSource()) 代码如下: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=”...

    浅谈js键盘事件全面控制

    今天,我们就来深入探讨JavaScript(js)中如何对键盘事件进行全面的控制,包括不同浏览器之间的兼容性处理以及代码实现和优化。 首先,我们需要明确浏览器中与键盘事件相关的主要类型,它们分别是keydown、...

    浅谈DNS重绑定漏洞1

    攻击者可以通过JavaScript代码构造跨域请求,这些请求在TTL到期后会指向新的IP地址,从而绕过同源策略,达到对受害者内部网络的攻击。 同源策略通常能有效防止不同源的脚本相互操作,但它并不阻止页面的重定向、...

    【JavaScript源代码】浅谈React双向数据绑定原理.docx

    然而,与 Vue.js 不同,React 并不原生支持双向数据绑定。在 Vue 中,双向数据绑定是通过 `Object.defineProperty`(在 Vue 2.x 中)或 `Proxy`(在 Vue 3.x 中)来实现的,而 React 需要开发者手动处理数据与视图间...

    浅谈JavaScript的Polymer框架中的事件绑定

    Polymer框架提供了一种简单的方式来绑定事件,即在元素标签上使用`on-*`属性的形式,例如`on-click`,将事件名直接绑定到相应的处理函数。如: ```html 求点击 ``` 上面的代码中,`clickHandler`是定义在Polymer...

    浅谈javascript面向对象编程

    ### 浅谈JavaScript面向对象编程 #### 一、概述 面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在JavaScript中,尽管语言本身并不支持传统的类(class)概念,但开发者可以通过原型继承和其他技术来...

    浅谈 javascript 事件处理

    第一种,内联事件处理器,是通过在HTML标签中直接使用on+事件名的方式来绑定事件处理程序。如: ```html ()" value="show"&gt; ``` 上例中,当按钮被点击时,将执行名为show的函数。 第二种,对象的on事件处理器,在...

    浅谈jQuery中的事件

    在jQuery中,有多种方式来绑定事件: #### 标准事件绑定 初始的事件绑定方式是使用`bind()`方法: ```javascript $("#btn").bind("click", function() { // 事件处理代码 }); ``` 然而,为了简化代码,jQuery提供...

    浅谈JavaScript 库———jQuery, ExtJs 的对比研究

    ### 浅谈JavaScript库——jQuery与ExtJs的对比研究 #### 一、引言 随着Web 2.0和RIA(Rich Internet Applications)技术的普及,JavaScript作为一种前端开发的重要工具,逐渐占据了重要的地位。它不再仅仅是用于...

    浅谈Vue数据绑定的原理

    Vue.js 是一款流行的前端JavaScript框架,它的一个核心特性就是数据绑定。本文将深入探讨Vue数据绑定的原理,帮助读者理解其工作方式。 首先,Vue的数据绑定基于JavaScript的Object.observe() API,虽然该API已被...

    浅谈vue中组件绑定事件时是否加.native

    本文将深入探讨Vue组件绑定事件时是否需要添加`.native`修饰符及其背后的原理。 1. 普通组件绑定事件 在Vue中,当我们为一个普通的HTML元素(如`&lt;input&gt;`、`&lt;button&gt;`等)绑定事件时,可以直接使用`@event`语法,...

    浅谈Vue.js组件(二)

    子组件通过`v-bind`将数据绑定到`&lt;slot&gt;`元素的属性上,然后父组件通过`v-slot`指令和参数来访问这些数据: ```html &lt;!-- 子组件 --&gt; &lt;span&gt;&lt;slot v-bind:user="user"&gt;{{ user.name }}&lt;/slot&gt;&lt;/span&gt; &lt;!-- 父组件 ...

    浅谈AngularJs 双向绑定原理(数据绑定机制)

    在传统的网页开发中,通常需要JavaScript来监听用户事件,然后手动更新DOM以反映数据变化。然而,AngularJS通过数据绑定机制,自动实现了模型与视图之间的同步。数据绑定分为两种类型:单向绑定和双向绑定。单向绑定...

    浅谈JavaScript事件的属性列表

    这些事件属性不仅可以应用于HTML元素,还可以通过JavaScript添加到DOM对象上,实现动态事件绑定。 除了基本事件属性外,还有一些与鼠标和键盘交互相关的属性: - `altKey`:如果事件发生时`Alt`键被按下,该属性为...

Global site tag (gtag.js) - Google Analytics