js关于事件的一些总结(系列一)

今天小弟在这里说一下 js 关于事件的一些总结  在这里直接上代码 省去啰嗦的步骤以免看烦了  总结的不好希望大家见谅

一、事件的默认事件

事件的默认事件是什么? 就是a标签有一个链接事件  input type标签有一个默认的点击输入事件 等等。。。。

那么问题来了 如果我这里有一个a标签  默认是有一个超链接的  我在a标签上添加了点击事件 那么会不会触发点击事件呢?? 答案是不会   代码来证明一下(经过测试)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件默认事件 </title>
</head>
<body>
    <a href="https://www.baidu.com/" id="Link">连接到百度</a>
        <script type="text/javascript">

         var  oA=document.getElementById(‘Link‘);
          oA.onclik=function  () {
            alert(1)
        }
        </script>
</body>

可以拿去测试   是真的不会弹出来的

那么怎么去阻止默认事件呢? 办法百度一大堆,但是你会发现有些不兼容  要么就是不兼容ie  要么就是不兼容火狐

IE 阻止默认事件代码

oA.onclick=function(event){
         alert(11)
      return false;
     }

也可以把return false  换成 window.event.returnValue = false;  他们是等价的 你仔细一看就能看出来的

其他浏览器阻止默认事件代码

 oA.onclick=function(event){
       event.preventDefault();
       alert(11)
     }  

那么问题又来了  我们难道要去写两个事件?? 如果写一个就会出现不兼容问题  如果写两个 那么我的页面中如果有50个带超链接的a标签 呢?? 需要写多少  如果是五百个呢??

这个时候 我们需要另一个概念 了  事件的检测  一般事件的检测都用if 来检测  一般结构都是if else if  结构

var eventUtil={
          preventDefault:function(event){
            if(event.preventDefault){
              event.preventDefault();
            }else{
              event.returnValue=false;
            }
          }
  }

请看如上代码 就是一个检测事件的功能  如果 支持preventDefault(); 那么就用preventDefault(); 否则就用 event.returnValue=false; 只是封装了一下 到时候直接拿过来用 肯定不能每一次调用都加一个if else  这样的话 也不是很成熟的写法。

至于调用代码也上一下   免得说我不仁义

  box.onclick=function(e){
      eventUtil.preventDefault(e);
}
  

2.事件的阻止事件(冒泡,捕获)

冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。-->水在做开的过程中会出现水上层出现小泡泡 水下层出现大泡泡  可以仔细观察哦

咱们先看一下是怎么冒泡的 (冒泡就像是水开了之后都是从水壶底下 往上边冒泡 而且泡越来越大,)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件冒泡和捕获</title>
    <style type="text/css">
           #div1{width: 100px; height: 100px; background: #999;}
    </style>
</head>
<body>
    <div id="div1">
        <input type="button" value="按钮" id="input1">
    </div>
</body>
<script type="text/javascript">
    window.onload=function  () {
        var oDiv=document.getElementById(‘div1‘),
            oIn=document.getElementById(‘input1‘);
        oDiv.onclick=function(){
            alert(‘我是点击div触发的‘)
        }
        oIn.onclick=function(){
            alert(‘我是点击input触发的‘)
        }
    }
</script>
</html>

简单的代码如上 你会发现  点击div只是出现第一个alert   但是点击input 就会先弹出来第二个alert  后又弹出来第一个alert  这个就叫做事件冒泡 但是我们只想点击input的时候出现最后一个alert  不要出现第一个alert 这个时候就需要咱们做一下事件冒泡的阻止 庆幸的是已经有了成熟的办法来解决

var eventUtil={
         stopPropagation:function(event){
           if(event.stopPropagation){
             event.stopPropagation();
           }else{
             event.cancelBubble=true;
           }
         }
  }

上边代码是一个事件的检测 和阻止事件默认事件是一样的思路 也处理了浏览器的兼容问题   调用也是一样  这里就不多说了

下边就是用事件监听来设置浏览器是用事件冒泡还是事件捕获   addEventListener
这里牵扯到了事件流 的概念:侦听器在侦听时有三个阶段:捕获阶段、目标阶段和冒泡阶段。顺序为:捕获阶段(根节点到子节点检查是否调用了监听函数)→目标阶段(目标本身)→冒泡阶段 (目标本身到根节点)。此处的参数确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。 如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。 如果useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。 要在所有三个阶段都侦听事件,请调用两次 addEventListener,一次将 useCapture 设置为 true,第二次再将useCapture 设置为 false。

百度百科关于addEventListener  链接:http://baike.baidu.com/link?url=5puDtK6dIAEVtT3X9xafqQjbnkQtGpbAypMzSuGaDBOLwJ45qYQVP7Q1udHNWhO_DsDSiisS3mHS0dss8Gc0R_

到此为止  事件的冒泡 事件的捕获 事件的阻止事件 和事件的监听我们都顺了一遍。 讲的不好 多多见谅! 系列二再次讲解一下遗漏的东西。。 周六日在整理一下 写一个关于dom0 和dom2级别事件 和js其他的一些东西  供大家借鉴  学习。。。  后续的js的数组  函数   闭包  原型链 作用域  设计模式 面向对象都会写一些  先承认自己是菜鸟 我只是希望大家看了我的博客能有一点点收获

做个小推广  首发群:前端技术交流群 384064953

时间: 2024-10-02 10:36:13

js关于事件的一些总结(系列一)的相关文章

js阻止浏览器、元素的默认事件与js阻止事件冒泡、阻止事件流

嵌套的div元素,如果父级和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下js阻止默认事件与js阻止事件冒泡示例,大家参考使用吧 1. event.preventDefault();  -- 阻止元素的默认事件.注:a元素的点击跳转的默认事件 , button,radio等表单元素的默认事件 , div 元素没有默认事件 例: 复制代码代码如下: <a href="http://www.baidu.com" target="_bl

Js 冒泡事件阻止

原文:Js 冒泡事件阻止 1. 事件目标 现在,事件处理程序中的变量event保存着事件对象.而event.target属性保存着发生事件的目标元素.这个属性是DOM API中规定的,但是没有被所有浏览器实现 .jQuery对这个事件对象进行了必要的扩展,从而在任何浏览器中都能够使用这个属性.通过.target,可以确定DOM中首先接收到事件的元素(即实际被单击的元素).而且,我们知道this引用的是处理事件的DOM元素,所以可以编写下列代码:$(document).ready(function

用js onselectstart事件鼠标禁止选中文字

IE&&Chrome中适用此方法 document.onselectstart=function(){return false;} onselectstart是防止内容被选中默认状态是true <body onselectstart=return(event.srcElement.type=='text')> 选不中 <input type="text" name="" value="来选吧"> </

JS(原生)事件委托:为动态创建的节点绑定事件

项目开发中经常需要为动态创建的节点绑定事件, 比如需要创建一个动态列表:在li的数量非常少的时候,为每一个li绑定事件不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(假设),为每个li绑定事件就会对页面性能产生很大的影响.当有大量元素需要绑定相同事件的时候可采用事件委托,将在目标元素上要处理的事件委托给父元素或者祖先元素 优点    事件委托对于web应用程序的性能有如下几个优点:    1.需要管理的函数变少了    2.占用的内存少了    3.javascrip

Atitit. &#160;Js 冒泡事件阻止&#160;事件捕获&#160;&#160;&#160;事件传递 &#160;事件代理

Atitit.  Js 冒泡事件阻止 事件捕获   事件传递  事件代理   1. 事件冒泡1 2. 事件捕获1 3. 同时支持了事件捕获阶段和事件冒泡阶段ddEventListener的第三个参数1 4. 事件代理3 5. 冒泡还是捕获?3 6. Js 冒泡事件阻止3 6.1. 返回false5 7. 事件冒泡 使处理函数有范围较大的触发面积,在“拖拽效果”脚本中是必须的5 8. refe6 8.1.1. 浅谈事件冒泡与事件捕获 - ac黄博客精选 - SegmentFault6   1. 事

原生js阻止事件冒泡代码实例

原生js阻止事件冒泡代码实例:关于什么是事件冒泡这里就不多介绍了,可以参阅javascript事件冒泡简单介绍一章节,任何现象都是双刃剑,有时候利用事件冒泡能够带来便利性,但是有时候也会带来不便,下面就通过带来实例介绍一下如何阻止事件冒泡现象.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" conte

JS之事件监听

一 如果事件监听类似于如下写法,则最终只会执行最后一个事件监听,其他监听都会被覆盖掉. window.onload=funtion(){console.log(1);}; window.onload=funtion(){console.log(2);}; window.onload=funtion(){console.log(3);}; //最终只会输出:"3" 二 如果事件监听类似于如下写法,则每个事件监听都会被执行,其他监听都不会被覆盖掉. --是否冒泡或捕获都不会影响输出结果的次

JS常见事件以及函数

1.js enter键激发事件 document.onkeydown = function (e) {            if (!e) e = window.event;            if ((e.keyCode || e.which) == 13) {                $("#btnSubmit").click();            }        } 2. JS常见事件以及函数

Js冒泡事件和捕获事件

js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获事件:捕获事件是从页面的最上层到被绑定元素都会触发. IE只支持事件冒泡,不支持事件捕获 冒泡事件和捕获事件的方向是相反的. 形式如下图所示: 一般为浏览器中的元素绑定事件有2种方式: 一.直接在页面元素中进行绑定,此方式采用的是冒泡排序,如: <div id="eventExample&qu