在JavaScript中,经常会遇到JavaScript的事件机制,例如,事件绑定、事件监听、事件委托(事件代理)等。这些名词是什么意思呢,有什么作用呢?
事件绑定
要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数。所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称。
在JavaScript中,有三种常用的绑定事件的方法:
- 在DOM元素中直接绑定;
- 在JavaScript代码中绑定;
- 绑定事件监听函数。
在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事件绑定方法:传统方式、W3C标准方式以及Internet Explorer (IE)方式,并分析它们...
JavaScript事件绑定是网页交互的核心部分,它允许用户与页面元素进行互动。本文将深入探讨JavaScript事件绑定的概念,以及如何处理常见的问题和优化策略。 首先,我们来看一个基础的事件绑定示例。在给出的HTML结构...
当给dom用jq的方法绑定了事件,会生成对应的时间列表 可以看下面的例子(请在firefox中查看 因为firefox中对象支持toSource()) 代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv=”...
今天,我们就来深入探讨JavaScript(js)中如何对键盘事件进行全面的控制,包括不同浏览器之间的兼容性处理以及代码实现和优化。 首先,我们需要明确浏览器中与键盘事件相关的主要类型,它们分别是keydown、...
攻击者可以通过JavaScript代码构造跨域请求,这些请求在TTL到期后会指向新的IP地址,从而绕过同源策略,达到对受害者内部网络的攻击。 同源策略通常能有效防止不同源的脚本相互操作,但它并不阻止页面的重定向、...
然而,与 Vue.js 不同,React 并不原生支持双向数据绑定。在 Vue 中,双向数据绑定是通过 `Object.defineProperty`(在 Vue 2.x 中)或 `Proxy`(在 Vue 3.x 中)来实现的,而 React 需要开发者手动处理数据与视图间...
Polymer框架提供了一种简单的方式来绑定事件,即在元素标签上使用`on-*`属性的形式,例如`on-click`,将事件名直接绑定到相应的处理函数。如: ```html 求点击 ``` 上面的代码中,`clickHandler`是定义在Polymer...
### 浅谈JavaScript面向对象编程 #### 一、概述 面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在JavaScript中,尽管语言本身并不支持传统的类(class)概念,但开发者可以通过原型继承和其他技术来...
第一种,内联事件处理器,是通过在HTML标签中直接使用on+事件名的方式来绑定事件处理程序。如: ```html ()" value="show"> ``` 上例中,当按钮被点击时,将执行名为show的函数。 第二种,对象的on事件处理器,在...
在jQuery中,有多种方式来绑定事件: #### 标准事件绑定 初始的事件绑定方式是使用`bind()`方法: ```javascript $("#btn").bind("click", function() { // 事件处理代码 }); ``` 然而,为了简化代码,jQuery提供...
### 浅谈JavaScript库——jQuery与ExtJs的对比研究 #### 一、引言 随着Web 2.0和RIA(Rich Internet Applications)技术的普及,JavaScript作为一种前端开发的重要工具,逐渐占据了重要的地位。它不再仅仅是用于...
Vue.js 是一款流行的前端JavaScript框架,它的一个核心特性就是数据绑定。本文将深入探讨Vue数据绑定的原理,帮助读者理解其工作方式。 首先,Vue的数据绑定基于JavaScript的Object.observe() API,虽然该API已被...
本文将深入探讨Vue组件绑定事件时是否需要添加`.native`修饰符及其背后的原理。 1. 普通组件绑定事件 在Vue中,当我们为一个普通的HTML元素(如`<input>`、`<button>`等)绑定事件时,可以直接使用`@event`语法,...
子组件通过`v-bind`将数据绑定到`<slot>`元素的属性上,然后父组件通过`v-slot`指令和参数来访问这些数据: ```html <!-- 子组件 --> <span><slot v-bind:user="user">{{ user.name }}</slot></span> <!-- 父组件 ...
在传统的网页开发中,通常需要JavaScript来监听用户事件,然后手动更新DOM以反映数据变化。然而,AngularJS通过数据绑定机制,自动实现了模型与视图之间的同步。数据绑定分为两种类型:单向绑定和双向绑定。单向绑定...
这些事件属性不仅可以应用于HTML元素,还可以通过JavaScript添加到DOM对象上,实现动态事件绑定。 除了基本事件属性外,还有一些与鼠标和键盘交互相关的属性: - `altKey`:如果事件发生时`Alt`键被按下,该属性为...