JavaScript学习笔记——基础篇(6)--事件委托

这篇博客详细介绍了JavaScript中的事件,包括事件三要素、鼠标事件、键盘事件、浏览器事件、表单事件以及事件的绑定和解绑方式。特别讨论了事件委托的概念和实现步骤,并展示了如何阻止浏览器默认行为。
摘要由CSDN通过智能技术生成

目录

事件

事件三要素:

 事件类型:

鼠标事件

键盘事件(不是所有元素都可以触发键盘事件 window、docment、输入框)

浏览器事件

表单事件

绑定事件的方式:

解绑事件:

事件对象:(存储了一些事件发生时的信息)

鼠标事件对象

键盘事件对象:主要判断我们按下的是哪个键

事件委托:

阻止浏览器默认行为:


事件

事件三要素:

  • 事件源      引发后续事件的元素节点
  • 事件类型     比如:点击事件、鼠标移入事件等
  • 事件处理函数   对该事件发生后的一系列操作

 事件类型:

  • 鼠标事件

  1. click       左键单击事件 (包括 一次按下 一次抬起)
  2. dbclick     左键双击
  3. contextmenu 右击点击事件
  4. mousedown   鼠标按下(包括是左键、右键、滚轮按下
  5. mouseup     鼠标抬起
  6. mousemove   鼠标移动
  7. mouseenter  鼠标移入
  8. mouseleave  鼠标移出
  9. mouseover   鼠标移入
  10. mouseout    鼠标移出
  • 键盘事件(不是所有元素都可以触发键盘事件 window、docment、输入框)

  1. keydown  键盘按下事件
  2. keyup    键盘抬起事件
  • 浏览器事件

  1. load     页面加载完毕
  2. scroll   页面滚动
  3. resize   窗口尺寸变化
  4. offline  网络断开
  5. online   网络恢复
  • 表单事件

  1. focus    获取焦点  属于input
  2. blur     失去焦点  属于input
  3. submit   提交事件  属于form表单
  4. reset    重复事件  属于form表单

绑定事件的方式:

  • 直接绑定
  • addEventLisener("事件类型",事件函数)  可以添加多个事件函数

解绑事件:

  • dom 0级   将null重新赋值给元素
  • dom 2级   removeEventLisener("事件类型",事件函数)  通过移出事件监听解绑函数是事件函数不能是匿名函数,否则无法执行该匿名函数地址

事件对象:(存储了一些事件发生时的信息)

  • arguments   保存了函数执行时传入的参数,与形参无关,和实参相关
  • 事件函数在触发时会自动传入一个参数,这个参数就是事件对象(在IE低版本浏览器5-7中,事件处理函数不需要接受形参,而是用window.event)
<script>
    var btn = document.getElementsByTagName("button")[0];
    btn.onclick = function(event){
//在低版本IE下,event时undifind ,转换为布尔值就是false.
      event = event || window.event;   //解决低版本浏览器兼容
      console.log(event);
    }
  </script>

  • 鼠标事件对象

  1. button 属性:表示我们按下的是哪个键(0 左键   1 滚轮   2右键)
  2. 获取鼠标位置:

        pageX  pageY                   参考点:页面左上角  (表示实际在页面中的位置)

        clientX   clientY                 参考点:视口左上角     (表示在可视窗口中的位置)

        screenX    screenY           参考点:屏幕左上角

案例:元素拖拽 

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
    <style>
      div{
        width: 100px;
        height: 100px;
        background-color: #8B0000;
        position: absolute;
      }
    </style>
	</head>
	<body>
    <div id="box"></div>
	</body>
  <script>
//方法一
    var box = document.getElementById("box");
    box.onmousedown = function(){
       document.onmousemove = function(){
         box.style.left = event.pageX - box.offsetWidth/2 +"px";
         box.style.top = event.pageY - box.offsetHeight/2 +"px";
       }
    }
    box.onmouseup = function(){
       document.onmousemove = "";
    }

//方法二
// var box = document.getElementById("box");
    // var flage =false;
    // box.onmousedown = function(){
    //   flage = true;
    // }
    // box.onmouseup = function(){
    //   flage = false;
    // }
    // document.onmousemove = function(){
    //   if(flage){
    //     box.style.left = event.pageX - box.offsetWidth/2 +"px";
    //     box.style.top = event.pageY - box.offsetHeight/2 +"px";
    //   }
    // }

  </script>
</html>
  • 键盘事件对象主要判断我们按下的是哪个键

  1. key属性:按下的是哪个键
  2. keycode: 按下的是哪个键 ,返回对应的编码
  3. 组合键:

事件委托:

步骤:

  1. 找到拥有共同事件类型,以及事件处理函数的元素节点
  2. 再找共同父节点
  3. 将事件绑定给父节点
  4. 在事件处理函数中:利用targrt判断是否是委托元素
  5. 符合条件则执行操作

案例:新增表格

  <script>
    var table = document.getElementsByTagName("table")[0];
    var insbtn = document.getElementById("insbtn");
    var delbtn = document.getElementsByClassName("delbtn");
    var changebtn = document.getElementById("changebtn");
    var tbody = document.querySelector("tbody");
    
    //插入点击事件
    insbtn.onclick = function(){
      var bookname = document.getElementById("bookname");  //获取新增书名
      var bookprice = document.getElementById("bookprice");//获取新增价格
      
      if(bookname.value != "" && bookprice.value != ""){
        var t1 =table.insertRow(table.length); // 插第一入行
         t1.insertCell(0).innerHTML ="《"+ bookname.value +"》" ;    //插入第一行第一例
         t1.insertCell(1).innerHTML ="¥"+ bookprice.value ; //插入第一行第二例
         t1.insertCell(2).innerHTML = "<button class = 'delbtn'>删除</button>" ;
        bookname.value = "";
        bookprice.value = "";
        var trs = document.getElementsByTagName("tr");
        changecolor();
      }
      else{
        alert("请输入新增内容");
      }
     
    }

    tbody.onclick = function(){
      if(event.target.nodeName == "BUTTON"){
        event.target.parentNode.parentNode.remove() ;
      }
      console.log(event.target);
      if(event.target.nodeName == "TD"){
        
        event.target.parentElement.style.backgroundColor ="#CCCCCC"
      }
    }
    
    
    // deletetr();
    
    // //删除行
    // function deletetr(){
    //   for(var i=0;i<delbtn.length;i++){
    //     delbtn[i].onclick = function(){
    //         this.parentNode.parentNode.remove() ;
    //     }
    //   }
    // }
     
    // changebtn.onclick = function(){
    //    table.rows[1].cells[0].setAttribute("contenteditable",true);
    // }
    
    // var trs = document.getElementsByTagName("tr");
    // changecolor();
    // function changecolor(){
    //   for(var i =1;i<trs.length;i++){
    //     if(i %2 == 0){
    //       trs[i].style.backgroundColor ="#D3D3D3";
    //       // trs[i].setAttribute("backgroundColor","#D3D3D3");
    //     }
    //   }
    // }
   
    
  </script>

阻止浏览器默认行为:

阻止事件默认行为:event.preventDefault();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值