이번에는 JS 이벤트 바인딩 및 이벤트 흐름 모델을 사용하는 방법과 JS 이벤트 바인딩 및 이벤트 흐름 모델을 사용할 때 주의 사항이 무엇인지 보여드리겠습니다.
1. JS 이벤트 j (1) JS 이벤트 분류
1 /onresize/onchange/onfoucs/onscroll3. 키보드 이벤트:
keydown: 키보드를 눌렀을 때 트리거됩니다.keypress: 키보드를 누르고 떼는 순간에 트리거됩니다.
keyup: 키보드를 올릴 때 트리거[주의사항]①실행 순서: keydown 키누름 keyup②키누름은 숫자, 문자, 기호 키만 캡처할 수 있으며 기능 키는 캡처할 수 없습니다.
3keydown 주기--길게 누를 때 키 누르기4keydown이 있지만 반드시 keyup은 아닙니다. 길게 눌렀을 때 포커스가 사라지면 keyup이 더 이상 실행되지 않습니다.
⑤keypress는 대소문자를 구분하며 keydown, kewup은 다르지 않습니다.
4. 이벤트 요소:
document.onkeydown=function(e){ console.log(e); } document.onkeydown=function(){ console.log(window.event); }
//兼容浏览器的写法: document.onkeydown=function(e){ e==e||Window.event; var Code=e.keyCode||e.which||e.charCode; if(code==13){ //回车 } }
② e.key를 사용하여 누른 키 문자로 직접 이동할 수 있습니다(권장하지 않음).
3keyCode/which/charCode를 사용하여 키의 ASCII 코드 값을 가져올 수 있습니다. (다양한 브라우저의 작성 방식과 호환)var Code=e.keyCode||e.which||e.charCode; //判断组合键 var isAlt=0,isEnt=0; document.onkeyup=function(e){ if(e.keyCode==18){ isAlt=1; } if(e.keyCode==13){ isEnt=1; } if(isAlt==1&&isEnt==1){ alert("同时按下Alt和Enter键"); } } document.onkeyup=function(){ console.log("keyup"); } document.onkeypress=function(){ console.log("keypress"); } document.onkeydown=function(){ console.log("keydown"); } document.onkeypress=function(){ console.log(window.event); } //判断是否按下了回车键 document.onkeydown=function(e){ var code=e.keyCode; if(code==13){ alert("你输入的是回车键"); } }
2. 이벤트 바인딩 모델
//body内容 <body> <button onclick="func()">内联模型绑定</button> <button id="btn1">哈哈哈哈</button> <button id="btn2">DOM2模型绑定</button> <button id="btn3">取消DOM2</button> </body>
1. 인라인 모델(인라인 바인딩): html 태그에서 속성의 속성 값으로 함수 이름을 직접 사용합니다.
<button onclick="func()">内联模型绑定</button>
단점: 콘텐츠와 동작의 분리에 대한 w3c의 기본 사양을 준수하지 않습니다.
2. 스크립트 모델(동적 바인딩): JS에서 노드를 선택한 다음 onclick 속성을 노드에 추가합니다.
document.getElementById("btn1")=function(){}
장점: 콘텐츠와 동작의 분리에 관한 w3c의 기본 사양을 준수하고 html과 js의 분리를 구현합니다. window.onload =function(){//事件}
단점: 동일한 노드는 동일한 유형의 이벤트를 한 번만 추가할 수 있습니다. 여러 번 추가하면 마지막 이벤트가 적용됩니다.
document.getElementById("btn1").onclick=function(){ alert(1234); } document.getElementById("btn1").onclick=function(){ alert(234); }//重复的只能出现最近的一次
3.DOM0에는 공통적인 단점이 있습니다. DOM0을 통해 바인딩된 이벤트는 바인딩되면 취소할 수 없습니다.
document.getElementById("btn3").onclick=function(){//不能取消匿名函数 if(btn.detachEvent){ btn.detachEvent("onclick",func1); }else{ btn.removeEventListener("click",func1); } alert("取消DOM2"); }
(2) DOM2 이벤트 모델
1. DOM2 이벤트 바인딩 추가:
①IE8 이전에는 .attachEvent("onclick", function) 사용
②IE8 이후에는 .addEventListener("click", function, true / false); 매개변수 3: false(기본값)는 이벤트 버블링을 의미하고, true를 전달하면 이벤트 캡처를 의미합니다.
③ 모든 브라우저 처리 방식과 호환 가능:
var btn=document.getElementById("btn1"); if(btn.attachEvent){ btn.attachEvent("onclick",func1);//事件,事件需要执行的函数IE8可以 }else{ btn.attachEventListener("click",func1); }
2. DOM2 바인딩의 장점:
① DOM2를 사용하여 동일한 노드가 동일한 유형의 여러 이벤트에 바인딩될 수 있습니다.
②DOM2를 사용하여 바인딩된 이벤트는 특수 기능을 사용하여 취소할 수 있습니다.3. 이벤트 바인딩 취소:
① 바인딩하려면 attachmentEvent를 사용하고, 취소하려면 detachevent를 사용합니다. ② 바인딩하려면 AttachEventListener를 사용하고, 취소하려면 RemoveEventListenter를 사용하세요.
참고: DOM2에 바인딩된 이벤트를 취소해야 하는 경우 이벤트를 바인딩할 때
콜백 함수
는 함수 이름이어야 하며
위 내용은 JS 이벤트 바인딩 및 이벤트 흐름 모델을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!