1. 事件默认行为及阻止方式

   1.1 浏览器的默认行为      

JavaScript事件本身所具有的属性,例如a标签的跳转,Submit按钮的提交,右键菜单,文本框的输入等。

   1.2 阻止默认行为的方式

event.preventDefault();  event.returnValue = false;  return false;

//IE低版本和其他版本都支持return false,而其他两种IE低版本不支持。

  1. <a href="">click here.</a>
  2. <script type="text/javascript">
  3. var aLink = document.getElementsByTagName("a")[0];
  4. aLink.onclick = function(e){
  5. var evt = e || event;
  6. console.log("aaa");
  7. //return false; //1
  8. //evt.preventDefault(); //2
  9. evt.returnValue = false; //3
  10. }
  11. </script>

自定义右键菜单 oncontextmenu

  1. ul{ /*菜单的css样式*/
  2. display: none;
  3. position: absolute;
  4. top: 0;
  5. left: 0;
  6. }
  1. var oUl = document.getElementsByTagName("ul")[0];
  2. document.oncontextmenu = function(e){ //右键点哪里,在哪里出现菜单
  3. var evt = e || event;
  4. oUl.style.display = "block";
  5. oUl.style.left = evt.clientX + "px";
  6. oUl.style.top = evt.clientY + "px";
  7. }

小例子来练手:

  1. // 文本框只能输入数字
  2. var aInput = document.getElementsByTagName("input")[0];
  3. aInput.onkeydown = function(e){
  4. var evt = e || event;
  5. //console.log(evt.keyCode);//48-57
  6. if(evt.keyCode < 48 || evt.keyCode > 57){
  7. return false;
  8. }
  9. }

2. DOM2级事件处理程序

DOM2级事件处理程序可以为一个元素添加多个事件处理程序。其定义了两个方法用于添加和删除事件处理程序:addEventListener()和removeEventListener()。

添加事件监听器:addEventListener(事件名,处理函数,布尔值)

移除事件监听器:removeEventListener(事件名,处理函数,布尔值)

注意:事件名不带on,处理函数为函数指针,布尔值代表冒泡或捕获。现在的版本可以省略第三个参数,默认值为false

这个布尔值为true,在捕获阶段处理事件,为false,在冒泡阶段处理事件,默认为false。

  1. var outer = document.getElementById("outer");
  2. outer.addEventListener("click",foo,true); //添加事件监听器
  3. outer.removeEventListener("click",foo,true); //移除
  4. function foo(){
  5. console.log("aaa");
  6. }
  7. //通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;移除时传入的参数与添加处理程序时使用的参数相同。这也意味着通过addEventListener()添加的匿名函数无法移除,需另外定义一个函数

*普通时间不存在兼容问题,而DOM2级事件存在兼容性问题,IE低版本对象不支持“addEventListener”属性或方法,

IE下的事件监听器:attachEvent(事件名,处理函数),detachEvent(事件名,处理函数) 注意:事件名带on。

道高一尺,魔高一丈,我们可以自己封装一个函数解决兼容问题。

  1. function foo(){
  2. console.log("aaa");
  3. }
  4. function addEvent(obj){
  5. if(obj.addEventListener){
  6. return obj.addEventListener("click",foo);
  7. }else{
  8. return obj.attachEvent("onclick",foo);
  9. }
  10. }
  11. addEvent(outer);

3. 事件委托机制

利用事件冒泡的原理,把本应添加给某元素上的事件委托给他的父级(外层)。

实现拖拽效果

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style type="text/css">
  7. div{
  8. width: 100px;
  9. height: 100px;
  10. background: aquamarine;
  11. position: absolute;
  12. top: 0;
  13. left: 0;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <div></div>
  19. <script type="text/javascript">
  20. var oDiv = document.getElementsByTagName("div")[0];
  21. oDiv.onmousedown = function(e){
  22. var evt = e || event;
  23. _left = evt.offsetX;
  24. _top = evt.offsetY;
  25. document.onmousemove = function(e){
  26. var evt = e || event;
  27. x = evt.clientX - _left;
  28. y = evt.clientY - _top;
  29. if(x<=0){x=0;}
  30. if(x >= document.documentElement.clientWidth - oDiv.offsetWidth){
  31. x = document.documentElement.clientWidth - oDiv.offsetWidth;
  32. }
  33. if(y >= document.documentElement.clientHeight - oDiv.offsetHeight){
  34. y = document.documentElement.clientHeight - oDiv.offsetHeight;
  35. }
  36. if(y<=0){y=0;}
  37. oDiv.style.left = x + "px";
  38. oDiv.style.top = y + "px";
  39. }
  40. document.onmouseup = function(){
  41. document.onmousemove = null;
  42. }
  43. }
  44. </script>
  45. </body>
  46. </html>

JavaScript 之默认行为 DOM2级,事件委托机制的更多相关文章

  1. JS事件委托(事件代理,dom2级事件)

    一.前言 说实话,真问我什么是事件委托,我肯定gg,还好查了一下,原来就是我之前练习过的DOM2级事件的应用. 二.什么是事件委托? 事件委托就是当事件触发时,把要做的事委托给父元素(或父元素的父元素 ...

  2. 2015-03-12——简析DOM2级事件

    DOM2级事件 事件的几种类型:对象事件,鼠标事件,键盘事件,表单事件,W3CDOM事件,以及针对浏览器的事件. 对象事件:window对象,也是javascript对象.load  适用于windo ...

  3. DOM0、DOM2级事件

    JavaScript DOM0.DOM2级事件 1.DOM0级事件:on+事件类型 在html行内直接绑定,也就是通过行内js绑定的例如<span onclick="alert('1' ...

  4. 关于DOM事件流、DOM0级事件与DOM2级事件

    一.DOM 事件模型 DOM 事件模型包括捕获和冒泡,捕获是从上往下到达目标元素,冒泡是从当前元素,也就是目标元素往上到 window 二.流 流的概念,在现今的 JavaScript 中随处可见.比 ...

  5. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

  6. dom0级事件和dom2级事件

    dom0级事件 <a href="#" id="hash" onclick="fn();fn1();"> <button ...

  7. 测试DOM0级事件和DOM2级事件的堆叠

    1. 问题 如果大家看过北风网CJ讲师的Javascript视频教程,就可以看到其封装了一个很强的事件添加和删除函数,如下所示 function addEvent(obj, evtype, fn) { ...

  8. DOM1级问题与DOM2级事件

    前几天有小伙伴问过我一个问题,为什么有DOM 0级事件以及DOM2级事件,但是却没有DOM1级事件呢?那我们今天就来说一说DOM的级别问题. 同时推荐伙伴们可以看看尚学堂有关JavaScript BO ...

  9. 关于DOM2级事件的事件捕获和事件冒泡

    DOM2级事件中addEventListener的执行机制,多个addEventListener同时添加时的执行先后规律: W3C的DOM事件触发分为三个阶段:①.事件捕获阶段,即由最顶层元素(一般是 ...

随机推荐

  1. centos7配置consul

    下载wget https://releases.hashicorp.com/consul/1.4.2/consul_1.4.2_linux_amd64.zip解压unzip consul_1.4.2_ ...

  2. Python3中urllib模块的使用

    转载自:https://www.cnblogs.com/php-linux/p/8365941.html 1.基本方法 urllib.request.urlopen(url, data=None, [ ...

  3. ZT: C#不建类直接Json解析与取值

    C#不建类直接Json解析与取值 2017年10月19日 15:58:22 圆圆娃哈哈 阅读数:701    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn. ...

  4. Javaweb里“容器“为何出现,应用在哪,未来发展趋势

    容器是一个Java 所编写的程序,可当做一个工具,没有容器时必须自行编写程序以管理对象关系,现在容器都会自动做好. 有一说法:如果有一个类专门用来存放其它类的对象,这个类就叫做容器.另一说法:容器里存 ...

  5. 下载了好久的IntelliJ IDEA一直没用

    今天想试一下然后打开了IJ,发现我居然一直没有配置JDK macos 配置完全按照这个一步步走下去就好了 https://jingyan.baidu.com/album/597a0643336e263 ...

  6. .NetCore WebApi 添加 Log4Net

    一 .配置 1.vs2019 创建一个.net core web程序,选择webapi 2.项目中添加一个配置文件:添加--新建项--XML文件,命名为log4net.config 我使用的是log4 ...

  7. vue+vue-cli+淘宝lib-flexible做移动端自适应

    总结用vue+vue-cli+淘宝lib-flexible做移动端自适应方案: 1.安装淘宝lib-flexible npm install lib-flexible --save 2.在入口文价ma ...

  8. C# List<string> to string

    List<string> names = new List<string>() { "John", "Anna", "Moni ...

  9. Java 中的按值传递

    Java 中只有按值传递 "Java 中只有按值传递",初看到这几个字有点不敢相信,无数次通过函数改变过对象,无数次跟同事说 Java 在传对象的时候是按引用传递.后来细细想想,之 ...

  10. 1.moocs

    “三巨头”:Coursera.edX和Udacity Coursera:http://www.coursera.org 目前发展最大的MOOCs平台,拥有相近500门来自世界各地大学的课程,门类丰富, ...