> 웹 프론트엔드 > JS 튜토리얼 > 자바스크립트 이벤트 구문 분석

자바스크립트 이벤트 구문 분석

小云云
풀어 주다: 2018-02-11 11:24:38
원래의
1351명이 탐색했습니다.

이벤트는 프로그래밍 중에 시스템 내에서 발생하는 작업 또는 사물입니다. 시스템은 프로그래머가 원하는 경우 프로그래머가 특정 방식으로 응답할 것이라고 알려주기 위해 이를 사용합니다. 이 기사는 모든 사람에게 도움이 되기를 바라며 주로 JavaScript 이벤트 분석을 공유합니다.

이벤트 메소드 추가

요소 속성

<span style="font-size: 14px;">var btn = document.querySelector('button');<br><br>btn.onclick = function() {<br>  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';<br>  document.body.style.backgroundColor = rndCol;<br>}<br><br>或者<br><br>var btn = document.querySelector('button');<br><br>function bgChange() {<br>  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';<br>  document.body.style.backgroundColor = rndCol;<br>}<br><br>btn.onclick = bgChange<br></span>
로그인 후 복사

인라인 이벤트

<span style="font-size: 14px;"><button onclick="bgChange()">Press me</button><br><br>function bgChange() {<br>  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';<br>  document.body.style.backgroundColor = rndCol;<br>}<br><br>或者<br><br><button onclick="alert(&#39;Hello, this is my old-fashioned event handler!&#39;);">Press me</button><br></span>
로그인 후 복사

이벤트 듣기 등록

<span style="font-size: 14px;">addEventListener()和removeEventListener();<br><br>btn.addEventListener('click', function() {<br>  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';<br>  document.body.style.backgroundColor = rndCol;<br>});<br><br>或者<br><br>btn.removeEventListener('click', bgChange);<br></span>
로그인 후 복사

장점과 단점

  • 요소 속성

<span style="font-size: 14px;">优:<br>     1. 兼容性好<br>     2. 行为的分离<br>     3.便于操作当事对象,因为function是作为on***的属性出现的,可直接用this引用当事对象<br>缺: <br>     1. 给同一个监听器注册多个处理器,后面的会覆盖前面<br>     btn.onclick=function(){alert('a')};<br>     btn.onclick=function(){alert('b')};<br></span>
로그인 후 복사
  • 인라인 이벤트

<span style="font-size: 14px;">优:<br>     1. 兼容性好,是最早的事件处理方法<br>     2. 方便快捷<br>缺: <br>     1. 代码杂糅<br>     2. 难以管理和效率低下,一个按钮看起来还好,但是如果有一百个按钮呢?得在文件中加上100个属性<br>     3. 文档很难解析<br></span>
로그인 후 복사
  • 이벤트 모니터링 등록

<span style="font-size: 14px;">优:<br>     1. 它允许为事件添加多个单独的处理程序。这对于DHTML库或Mozilla扩展尤其有用,即使使用其他库/扩展也需要很好的工作<br>     2. 它可以让你更好地控制阶段,当听者被激活(捕获与冒泡)<br>     3. 它适用于任何DOM元素,而不仅仅是HTML元素<br>     4. 行为的分离 <br>缺:<br>    兼容性(不过网上有很多成熟的hack);<br></span>
로그인 후 복사

Event object

자세한 내용은 이벤트 세부정보를 참조하세요 - https://developer.mozilla.org

  • DOM에서 이벤트가 트리거되면 이벤트 핸들러 함수에서 이벤트 객체 이벤트가 생성됩니다. 이 객체에는 이벤트와 관련된 모든 정보가 포함됩니다. 이벤트를 발생시킨 요소, 이벤트 유형 및 특정 이벤트와 관련된 기타 정보를 포함합니다.

<span style="font-size: 14px;">var btn = document.getElementById("myBtn");<br>btn.onclick = function(event) {<br>    alert(event.type); //"click"<br>}<br>btn.addEventListener("click", function(event) {<br>    alert(event.type); //"click"<br>}, false);<br></span>
로그인 후 복사

event.currentTarget 및 event.target

<span style="font-size: 14px;">事件对象event的target属性始终是事件刚刚发生的元素的引用<br></span>
로그인 후 복사
  • 예를 들어 다음과 같은 내용이 있을 수 있습니다. 16개의 사각형 세트, 클릭하면 사라집니다. e.target을 사용하면 더 어려운 방법으로 선택하는 대신 항상 현재 작업 중인 항목(사각형)을 정확하게 선택하고 해당 항목을 사라지게 하는 작업을 수행할 수 있습니다.

<span style="font-size: 14px;">var ps = document.querySelectorAll('p');<br><br>for (var i = 0; i < ps.length; i++) {<br/>  ps[i].onclick = function(e) {<br/>    e.target.style.backgroundColor = bgChange();<br/>  }<br/>}<br/></span>
로그인 후 복사

기본 동작을 방지합니다. (event.preventDefault( :)

<span style="font-size: 14px;">var form = document.querySelector(&#39;form&#39;);<br/>var fname = document.getElementById(&#39;fname&#39;);<br/>var lname = document.getElementById(&#39;lname&#39;);<br/>var submit = document.getElementById(&#39;submit&#39;);<br/>var para = document.querySelector(&#39;p&#39;);<br/>form.onsubmit = function(e) {<br/>  if (fname.value === &#39;&#39; || lname.value === &#39;&#39;) {<br/>    e.preventDefault();<br/>    para.textContent = &#39;You need to fill in both names!&#39;;<br/>  }<br/>}<br/></span>
로그인 후 복사
  • Event delegation

<span style="font-size: 14px;">描述事件触发时序问题的术语。<br/>事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。<br/>事件冒泡是自下而上的去触发事件。<br/>绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡<br/></span>
로그인 후 복사
예: li에 마우스를 올리면 해당 li 배경이 회색으로 변합니다

<span style="font-size: 14px;">冒泡还允许我们利用事件委托——这个概念依赖于这样一个事实,如果你想要在大量子元素中单击任何一个都可以运行一段代码,您可以将事件监听器设置在其父节点上,并将事件监听器气泡的影响设置为每个子节点,而不是每个子节点单独设置事件监听器<br/></span>
로그인 후 복사
자바스크립트 이벤트 구문 분석

사용 이벤트 버블링을 달성하기

<span style="font-size: 14px;"><ul><br>    <li>item1</li><br>    <li>item2</li><br>    <li>item3</li><br>    <li>item4</li><br>    <li>item5</li><br>    <li>item6</li><br></ul><br></span>
로그인 후 복사

이벤트를 모든 li
  • <span style="font-size: 14px;">$("ul").on("mouseover",function(e){<br>     $(e.target).css("background-color","#ddd").siblings().css("background-color","white");<br>})<br></span>
    로그인 후 복사
    <span style="font-size: 14px;">$("li").on("mouseover",function(){<br>      $(this).css("background-color","#ddd").siblings().css("background-color","white");<br>})<br></span>
    로그인 후 복사

    맞춤 이벤트(DOM 이벤트 시뮬레이션은 "의사 DOM 맞춤 이벤트"라고도 함)
  • JS 네이티브 사용자 정의 이벤트는 세 단계(생성, 초기화, 트리거)로 나뉩니다

https://developer.mozilla.org에서 발췌...

  • (1)Create

    <span style="font-size: 14px;">代码简洁程度上,两者是相若仿佛的。<br>前者少了一个遍历所有li节点的操作,所以在性能上肯定是更优的<br>如果在绑定事件完成后,页面又动态的加载了一些元素<br>第二种方案,由于绑定事件的时候item7还不存在,所以为了效果,我们还要给它再绑定一次事件.<br></span>
    로그인 후 복사

    ( 2) 초기화
<span style="font-size: 14px;">var event = document.createEvent(type);<br>type:是一个字符串,表示要创建的事件类型。事件类型可能包括是一个字符串,表示要创建的事件类型。<br>事件类型可能包括"UIEvents", "MouseEvents", "MutationEvents", 或者 "HTMLEvents"<br></span>
로그인 후 복사
(3) .Trigger
<span style="font-size: 14px;">event.initEvent('build', true, true);<br>于初始化通过DocumentEvent接口创建的Event的值。支持三个参数:initEvent(eventName, canBubble,preventDefault)<br>分别表示事件名称,是否可以冒泡,是否阻止事件的默认操作<br></span>
로그인 후 복사

listening method

jq custom dom event

(1).

rreee

<span style="font-size: 14px;">elem.dispatchEvent(event);<br>参数event表示事件对象,是createEvent()方法返回的创建的Event对象<br></span>
로그인 후 복사
<span style="font-size: 14px;">elem.addEventListener('build', function (e) {<br>// e.target matches elem<br>}, false);<br></span>
로그인 후 복사
( 2).);(기본 이벤트 차단)
    <span style="font-size: 14px;">常用模拟<br>  模拟方法操作<br>   $("#btn").trigger("click");<br>     或者    <br>   $("#btn").click();<br></span>
    로그인 후 복사
  • DOM 맞춤 이벤트 장점과 단점:

  • (1), 장점:

    <span style="font-size: 14px;">自定义事件<br>   $("#btn").on("myClick", function () {<br>       $("#test").append("<p>我的自定义事件。</p>");<br>    });    <br>   $("btn").trigger("myClick");<br></span>
    로그인 후 복사
    (2), 단점
      <span style="font-size: 14px;">传递数据<br>  trigger(tpye[,datea]);<br>  第一个参数是要触发的事件类型,<br>  第二个单数是要传递给事件处理函数的附加数据,以数组形式传递。<br>  通常可以通过传递一个参数给回调函数来区别这次事件是代码触发的还是用户触发的<br>   $("#btn").bind("clickCustomize", function (event, message1, message2) { //获取数据<br>        $("#test").append("p" + message1 + message2 + "</p>");<br>   });<br>   $("#btn").trigger("clickCustomize",["我的自定义","事件"]); //传递两个数据<br>   $(“#btn”).trigger(“clickCustomize”,["我的自定义","事件"]); //传递两个数据<br></span>
      로그인 후 복사
    • 관련 권장사항:

      JavaScript 이벤트 핸들러에 대한 자세한 설명

    • Javascript 이벤트 및 마우스 좌표 속성

      JavaScript 이벤트 학습을 위한 이벤트 스트림, 핸들러 및 객체 요약

      위 내용은 자바스크립트 이벤트 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

      관련 라벨:
      원천:php.cn
      본 웹사이트의 성명
      본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
      인기 튜토리얼
      더>
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿