JS-事件(内容的设定、鼠标事件、事件对象、键盘事件、触摸事件、特殊事件、事件对象的目标、事件委托)
发布日期:2021-05-12 03:07:04 浏览次数:33 分类:精选文章

本文共 3908 字,大约阅读时间需要 13 分钟。

HTMLDOM操作与事件处理指南

一、事件类型之鼠标事件

鼠标事件通过操作鼠标来触发事件,常用的鼠标事件包括左键单击、左键双击、右键单击等。以下是主要鼠标事件的分类及使用方法:

  • 左键单击事件

    element.onclick = function(){ /*・・・・*/ }
    通过左键点击元素时触发事件

  • 左键双击事件

    element.ondblclick = function(){ /*・・・・*/ }
    左键连续点击两次,元素可以被选中或打开链接

  • 右键单击事件

    element.oncontextmenu = function(){ /*・・・・*/ }
    右键单击元素时触发事件

  • 鼠标按键按下事件

    element.onmousedown = function(){ /*・・・・*/ }
    鼠标按下元素时触发事件

  • 鼠标按键抬起事件

    element.onmouseup = function(){ /*・・・・*/ }
    鼠标抬起元素时触发事件

  • 鼠标移入事件

    element.onmouseover = function(){ /*・・・・*/ }
    鼠标移动到元素边界线附近时触发事件

  • 鼠标移出事件

    element.onmouseout = function(){ /*・・・・*/ }
    鼠标移出元素边界线附近时触发事件

  • 鼠标移动事件

    element.onmousemove = function(){ /*・・・・*/ }
    鼠标在元素范围内移动时触发事件

  • [总结]:

    - 鼠标移入和移出事件会根据当前标签和子级标签的边界线触发。 - 鼠标enter和leave事件只会在当前标签边界线触发。

    二、事件类型之表单事件

    表单事件与表单控件相关,常用于处理用户输入和表单提交行为。表单事件主要包括焦点获取、输入事件和表单提交事件等:

  • 焦点获取事件

    element.onfocus = function(){ /*・・・・*/ }
    当控件焦点获取时触发事件

  • 焦点失去事件

    element.onchange = function(){ /*・・・・*/ }
    当控件焦点失去或数据发生改变时触发事件

  • 输入事件

    element.oninput = function(){ /*・・・・*/ }
    用户输入时控制台会显示输入内容

  • 表单提交事件

    form.onsubmit = function(e){ /*・・・・*/ }
    当用户提交表单时触发事件
    [注意]:通过阻止默认事件行为可防止表单提交。

  • [总结]:

    - `input`事件适用于所有绑定输入的控件。 - 处理表单提交时建议结合`e.preventDefault();`阻止默认行为。

    三、事件类型之键盘事件

    键盘事件用于检测用户键盘按键的状态和按键组合,常见于实现弦穿透、快速输入等功能。以下是关键键盘事件的分类及使用方法:

  • 键盘按下事件

    window.onkeydown = function(e){ /*・・・・*/ }
    当用户按下键盘任意按键时触发事件

  • 键盘抬起事件

    window.onkeyup = function(e){ /*・・・・*/ }
    当用户释放键盘按键时触发事件

  • 按键编码获取

    由于不同浏览器对e.keyCodee.which的兼容性问题,建议使用e.keyCode || e.which获取按键编码

  • 按键组合判断

    • ctrlKey:e.ctrlKey
    • altKey:e.altKey
    • shiftKey:e.shiftKey
    • [示例]:
      if(e.ctrlKey && e.keyCode == 69) { console.log("Ctrl+E按下"); }
  • 关键按键组合

    特殊的按键组合可以通过多次事件处理来实现,结合按键编码和e.ctrlKey等属性判断。

  • [总结]:

    - 键盘事件只能绑定给`window`、`document`或被选中的控件(如`input`、`select`等)。 - 按键编码具有浏览器通用的唯一性,适合用来区分不同按键。

    四、事件类型之触摸事件和特殊事件

    触摸事件主要用于与移动端交互,常用于触摸屏或移动应用开发。以下是触摸事件及特殊事件的分类:

  • 触摸事件

    • touchstart:触摸开始时触发事件
    • touchend:触摸结束时触发事件
    • touchmove:触摸元素在移动时触发事件
  • 特殊事件

    • transitionend:当CSS过度结束时触发事件
    • animationend:当CSS动画结束时触发事件
    • [示例]:
      内容
  • 长按事件

    通过计算触摸开始和结束的时间戳差值来判定是否为长按。建议使用以下方法检测:

    const startTime = Date.now();  
    const endTime = Date.now();
    const longPress = endTime - startTime > 1000;
  • [总结]:

    - 触摸事件适用于移动端应用。 - 长按事件通常用于触控设备的长时间按压操作。

    五、事件对象

    事件对象是事件处理函数的参数,其主要作用是提供事件的相关信息,如触发事件的标签、按键信息、组合信息等:

  • 获得事件对象

    function handleClick(e) {  
    e = e || window.event;
    // 使用事件对象处理
    }
  • 事件对象的常用属性

    • e.target:触发事件的标签对象
    • e.tagName:触发事件的标签名称(大写)
    • e.target.id:触发事件标签的id属性值
    • e.target(attrName):通过getAttribute获取指定属性值
  • 事件对象的兼容问题

    • 低版本IE浏览器不支持e.target,需使用e.srcElement兼容语法。
    • 按键编码部分需使用兼容代码:
      var key = e.keyCode || e.which;
  • [总结]:

    - 事件对象是实现事件处理逻辑的核心工具。 - 事件对象的属性能够帮助开发者获取到事件发生时的详细信息。

    六、事件对象的目标

    事件对象提供了一系列属性和方法来获取或操作触发事件的标签:

  • 获取触发事件的标签

    var targetElement = e.target || e.srcElement;
  • 获取事件目标的相关信息

    • 标签名称:targetElement.tagName
    • 标签id值:targetElement.id
    • 统一资源标识符(URI):targetElement.getAttribute('data-uri')
  • 事件绑定兼容性

    • 标签绑定的事件函数需兼容window.event
    • 例如:
      element.onclick = function(e){  
      e = e || window.event;
      }
  • [总结]:

    - 事件对象的目标属性允许开发者获取触发事件的具体标签信息。 - 需要注意不同浏览器对事件对象的属性支持可能存在差异。

    七、事件传播与冒泡事件

    事件的传播是指在标签层级关系基础上,多个标签可能参与事件的处理过程:

  • 冒泡事件机制

    • 当子级标签触发事件时,按浏览器不同,事件会向上的父级标签传播,直到触及document
    • [示例]:
      Inner
  • 阻止事件传播

    • 使用e.stopPropagation()方法禁止事件传播。
    • 低版本IE浏览器需使用e.cancelBubble = true;
    • [示例]:
      document.addEventListener('click', function(e){  
      if(e.stopPropagation){
      e.stopPropagation();
      }else{
      e.cancelBubble = true;
      }
      });
  • 事件传播的重要性

    • 父级事件处理程序可在子级事件处理之后执行。
    • 有时需阻止事件传播以避免冲突或不必要的操作。
  • [总结]:

    - 事件传播机制决定了多个标签可能参与事件处理。 - 阻止事件传播可避免意外的DOM更新或数据提交。

    八、事件委托

    事件委托是一种优化方式,允许动态添加事件处理器,而无需在每个动态生成的标签上单独绑定事件:

  • 事件委托的概念

    将事件绑定到父级标签上,通过判断触发事件的标签类型(如通过e.target获取)来执行相应的事件处理函数。

  • 实现方法

    // 事件目标判断  
    divElement.addEventListener('click', function(e){
    const targetElement = e.target;
    if(targetElement.tagName == 'SPAN'){
    // 处理 Span 标签的点击事件
    }
    }
  • 事件委托的优点

    • 避免了大量重复的for...in循环。
    • 不管标签是否为动态生成的,都可以用父级标签处理事件。
    • 代码更简洁,性能更优。
  • 事件委托的适用场景

    • 处理动态生成的标签事件。
    • 适合需要根据触发标签类型执行不同操作的情况。
  • [总结]:

    - 事件委托是优化事件处理的高级技巧,特别适用于动态DOM操作。 - 需要通过`e.target`来判断事件触发标签类型。
    上一篇:JS-事件委托demo-表格信息登记
    下一篇:JS-表单验证提交

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年05月24日 13时48分03秒