JavaScript基础教程(一)—处理事件

一.处理事件(一)

事件event是用户在访问页面时执行的操作。提交表单和在图像上移动鼠标就是两种事件。当浏览器探测到一个事件时,比如用鼠标单击或按键,它可以触发与这个事件相关联的JavaScript 对象,这些对象称为事件处理程序eventhandler或者叫做事件侦听器。

1. 设置HTML标签属性为事件处理程序(避免使用)

1)直接将JS代码写在HTML

<p onclick="alert(‘click‘)">HTML事件处理程序</p>

2)定义一个函数,赋值给html元素的onXXX属性

<script type="text/javascript">
    function alert (){};
</script>
<div onclick=" alert ()">HTML事件处理程序</div>

暴露出来HTML事件处理程序的很多问题:

(1)HTML代码与JavaScript代码紧密的耦合在一起,如果要更换事件处理程序,就要改动两个地方:html代码和JavaScript代码。

(2)扩展事件处理程序的作用域链在不同浏览器当中会导致不同的结果。(暂时没看懂,可参考文章SJ9009: 元素的内联事件处理函数的特殊作用域链在各浏览器中存在差异

(3)存在一个时差问题。如果存放在函数当中,那么,会面临一个问题——当函数还没有被定义(当时的事件处理程序有可能尚不具备执行条件,该事件处理程序可能在js脚本内,还没有被解析),只是HTML、CSS代码加载完毕,用户进行点击,会完全没有反应。为此,很多HTML事件处理程序都会被封装在一个try-catch块中,以便错误不会浮出水面,如下面的例子所示:

<input type="button" value="Click me" onclick="try{showMessage();}catch(ex){}" />

(4)若给同一元素写多个onclick事件处理属性,浏览器只执行第一个onclick里面的代码,后面的会被忽略;

2. DOM0级事件处理程序(所有的浏览器都支持DOM0 级事件处理程序。)

可以直接设置 DOM 属性来指定某个事件对应的处理函数

例如:

<div id="d3">Div3 Element</div>
<script type="text/javascript">
    //获取对象
    var d3 = document.getElementById(‘d3‘);
    //单击事件
    d3.onclick = function(){alert("clicked");    }
</script>

就是监听 element 节点的 click 事件。

在这些代码运行以前不会指定事件处理程序,因此如果这些代码在页面中位于按钮后面,就有可能在一段时间内怎么单击都没有反应。(代码还没有加载)。(放在前面就找不到d3了)

使用DOM0级方法指定的事件处理程序被认为是元素的方法。

 btn.onclick=null;  //删除事件处理程序

将事件处理程序设置为null之后,再单击按钮将不会有任何动作发生。

【缺点】
1.如果代码位于按钮后面,就有可能一段时间内怎么单击都没有反应。
2.当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉。也就是说,在对象的onclick事件发生时,只会执行最后绑定的方法。而是用事件监听则不会有覆盖的现象,每个绑定的事件都会被执行。但是IE家族先执行后绑定的方法,也就是逆绑定顺序执行方法,其他浏览器按绑定次数顺序执行方法。

3. DOM2级事件处理程序
“DOM2级事件”定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()
1)addEventListener

element.addEventListener(<event-name>, <callback>, <use-capture>);

参数一 :event-name 事件名称或类型
参数二:callback 回调函数,会在事件触发的时候被调用。
参数三:use-capture表示该事件监听是在“捕获”阶段中监听(设置为 true)还是在“冒泡”阶段中监听(设置为 false)。

<button id="btn">点击这里</button>

var btn = document.getElementsByTagName(‘button‘);
btn.addEventListener(‘click‘, function() {
    alert(‘你点击了这个按钮‘);
}, false);

2) removeEventListener

如果我们想解除绑定,需要使用 removeEventListener 方法:

element.removeEventListener(<event-name>, <callback>, <use-capture>);

需要注意的是,绑定事件时的回调函数不能是匿名函数,必须是一个声明的函数,因为解除事件绑定时需要传递这个回调函数的引用,才可以断开绑定。例如:

var fun = function() {
    // function logic
};

element.addEventListener(‘click‘, fun, false);
element.removeEventListener(‘click‘, fun, false);

特点:

1)只有运行完addEventListener()才为元素绑定了事件处理程序。
2)可以为同一个元素绑定多个事件处理程序,通过addEventListener()方法给同一对象注册多个同类型的事件,并不会发生忽略或覆盖,而是会按顺序依次执行;这是DOM0 级事件处理程序不支持的哦~ DOM0 级只能添加一个事件处理程序,后添加的会覆盖先添加的。
3)使用AddEventLister()添加的事件处理程序只能使用removeEventLister()来移除。且保持参数相同。
4)IE9、Firefox、Safari、Chrome和Opera都支持DOM2 级事件处理程序, addEventListener()方法不支持IE9(不包含IE9)以下的浏览器。

4. IE事件处理程序

IE8以及其之前版本的浏览器并不支持addEventListener()和removeEventListener()。但是,IE定义了类似的方法attachEvent()和detachEvent()。
attachEvent()和detachEvent()要求只有两个参数:事件类型和事件处理函数。
注:IE10及之前版本支持attachEvent()和detachEvent()方法,IE11不再支持,一般IE9及以上都使用DOM方法,这两个方法仅对IE8及以下版本使用。支持IE事件处理的只有IE和Opera

添加事件处理程序:

var btn = document.getElementById(‘myBtn‘);
btn.attachEvent(‘onclick‘, function () { // 注意这里是 onclick 哦~
    console.log(‘hello‘);
});

移除事件处理程序:

使用detachEvent移除事件处理程序的条件与DOM方法相同——必须提供相同的参数,从而添加的匿名函数也无法被移除。

var btn = document.getElementById(‘myBtn‘);
btn.detachEvent(‘onclick‘, show);

特点:

1)只有运行完attachEvent()才为元素绑定了事件处理程序。
2)可以为同一个元素绑定多个事件处理程序,绑定的事件处理程序会按照它们添加顺序的相反次序被触发,即先添加后执行,后添加的先执行

注意:本文为原创,转载请以链接形式标明本文地址 ,谢谢合作。

本文地址:http://www.cnblogs.com/wanghuih/p/5611682.html

时间: 2024-11-06 22:47:06

JavaScript基础教程(一)—处理事件的相关文章

《JavaScript基础教程(第8版)》PDF

简介:JavaScript基础教程(第8版)循序渐进地讲述了JavaScript及相关的CSS.DOM.Ajax.jQuery等技术.书中从JavaScript语言基础开始,分别讨论了图像.框架.浏览器窗口.表单.正则表达式.用户事件和cookie,并在上一版的基础上新增了两章,讲述jQuery框架的基础知识.本书不仅介绍了基础知识和使用方法,也深入探讨了JavaScript应用示例. 封面: 目录:第1章 了解JavaScript 11.1 JavaScript是什么 11.2 JavaScr

javascript入门书籍推荐《javascript基础教程》

前段时间看javascript高级教程的时候,发现很多基础的javascript概念,自己不懂. 网上搜了一下,看到大家对<javascript基础教程(第8版)>评价不错,买了一本. 作者: (美)Tom Negrino Dori Smith 译者: 陈剑瓯 柳靖 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 翻开看了后,受益匪浅,决定将这本书推荐给javascript的入门童鞋. 这本书的读者,要有一定的HTML基础,因为javascript基本都是对Dom的操作,所以,有一定的HT

javascript 基础教程[温故而知新一]

子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果有很久没用了的话,就会忘记,甚至是忘的你一点都想不起来,尤其是一些基础的东西.所以我才打算写个"温故而知新"的系列博文出来,一来是这些基础的东西我比较健忘,以后方便自己翻阅:二来是希望可以帮助到一些刚入门的朋友.这个系列记录的所有知识点都是最最最(重要的事情说三遍)基础的知识.大部分都是我

JavaScript基础教程(一)

一.JavaScript介绍     1.JavaScript是互联网上最流行的脚本语言,这门语言可用于web和HTML,更可广泛用于服务器.PC端.移动端. 2.JavaScript脚本语言:JavaScript是一种轻量级的编程语言.JavaScript是可插入HTML页面的编程代码.JavaScript插入HTML页面后,可由所有的浏览器执行. 二.JavaScript实现 1.JavaScript用法:HTML中的脚本必须位于<script></script>标签之间.脚本

JavaScript基础教程(二)

一.JavaScript语法 1.JavaScript语句:JavaScript语句向浏览器发出的命令.语句的作用是告诉浏览器该做什么. 2.分号:语句之间用分号分割.分号是可选项,可以不加.建议加上. 3.JavaScript代码:按照编写顺序依次执行. 4.标识符:JavaScript标识符必须以字母.下划线或美元符号开始.JS关键字不能使用(如document). 5.JS对大小写敏感. 6.加空格不影响执行. 7.代码换行:不要再代码的字母之间换行 8.保留字:使用的时候注意 <!DOC

[JavaScript] 学习笔记-JavaScript基础教程

1.JavaScript介绍 1)JavaScript是互联网上最流行的脚本语言,这门语言可用于Web和HTML,更可广泛用于服务器.pc端.移动端.JavaScript是一种轻量级的编程语言,插入HTML后,可由所有的浏览器执行 2)HTML中的脚本必须位于<script></script>标签之间:脚本可被放置于HTML页面的<head>和<body>部分中(通常把脚本放在<head>标签中,以不干扰页面的内容) 3)在HTML中,不限制脚本

JavaScript基础教程(三)

一.JS变量 1.变量是用来储存信息的"容器".例:var x=10; var y=10.1; var z="hello"; <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body&g

三元运算符——Javascript基础教程mark

三元运算符 判断条件?(条件为真时执行):(条件为假时执行) 对比记忆 var color='red' ; //判断颜色是否为red if(color==='red') { console.log('takeout'); }else { console.log('nothing'); } //使用三元运算符实现 color==='red' ?  console.log('takeout') : console.log('nothing') ; 注:复杂的条件不建议写成三元运算符,直接用if el

web前端javaScript基础教程

大家好,我是轻风乍起,本人从事前端8年了,总结了很多学习资料,有时间我会普及一些入门和提升建议,思想提升了,路线明确了自然就好了,于是就整理了下这篇学习路线文章,干货福利内容 在文末↓ 一,循环语句1.1 累加器累加器:我们不想输出所有的可能值,只想输出一个最后满足条件的总数.累加器:1累加器是一个变量,必须书写在for循环外面.2累加器初始值是0,有一个满足条件的结果累加器自加13累加器最终结果也是在for外面输出 案例:求一个正整数约数总个数.1// 获取数字2var num = parse