다음 스크린 샷에서 누군가 button.removeEventListener ("click", once)에 "once"함수를 전달해야하는 이유를 설명해 주실 수 있습니까? removeEventListener 메서드가 두 개의 인수를 필요로하기 때문에 우리는 단순히 그것을 전달합니까? 또한 "once"함수가 removeEventListener 메소드에도 전달되면 "Done"은 콘솔에 두 번 이상 로그되지 않습니다. Ellquent JavaScript의 removeEventListener 예제
답변
당신이 (여기처럼 당신이 바인딩 해제 once
핸들러이다) 특정 핸들러 바인딩을 해제 할
let button = document.getElementById("button");
function once() {
console.log("Done");
button.removeEventListener("click", once);
}
button.addEventListener("click", once);
<button id="button">once</button>
각 이벤트에 바인드 된 핸들러가 여러 개있을 수 있습니다.
또한 "once"기능이 removeEventListener 메서드로 전달되면 "Done"이 두 번 이상 콘솔에 기록되지 않는다는 것이 이상하게 보입니다.
그것이 한 번만 호출 된 이유입니다. 당신은 함수 once
의 레퍼런스를 넘겨 주므로, JS는 어떤 핸들러를 언 바인딩할지 압니다. removeEventListener
에 전화 할 때 전화하지 않습니다.
버튼을 클릭하면 처리기에서이 함수가 호출되고 처리기에서는 console.log
이 있으며 바로 등록 해제하면 후자의 클릭으로 더 이상 해당 함수가 실행되지 않습니다.
Martin에 대한 설명 주셔서 감사합니다. 도움이되었습니다. – phao5814
자바 스크립트의 여러 이벤트를 동일한 작업의 요소에 바인딩 할 수 있습니다.
바운드 이벤트에서 특정 처리기를 제거하려면 해당 처리기 함수 이름을 removeEventListener
에 전달해야합니다. removeEventListener
에 두 번째 인수를 전달하지 않으면 해당 이벤트에 대한 해당 조치의 모든 핸들러가 제거됩니다.
귀하의 경우에는 처리기 once
을 제거해야합니다.
다른 핸들러 예는 설명하기 :
| script start | nothing happens | once() execute | nothing happens |
---------------|--------------|-----------------|----------------|-----------------|
"click" Events | once() added | once() waiting | once() removed | |
| lala() added | lala() waiting | lala() waiting | lala() waiting |
기능 : removeEventListener
에
function firstListener(e) {
console.log('firstListener');
}
function secondListener(e) {
console.log('secondListener');
// this will remove `firstListener` handler from subsequent button clicks
e.target.removeEventListener('click', firstListener);
}
// bind first event handler function
document.querySelector('#btnMultiEvent').addEventListener('click', firstListener);
// bind second event handler function
document.querySelector('#btnMultiEvent').addEventListener('click', secondListener);
<button id="btnMultiEvent">Multiple Event Button</button>
더 날 아스키 코드 표에 설명하게 라라 한 번만 동일하고 "클릭"이벤트에서 자체적으로 제거합니다.
- 1. JavaScript의 FizzBuzz 예제
- 2. removeEventListener 이벤트 핸들러를 참조하지 않고
- 3. Laravel Ellquent Cascading Deletes
- 4. Ellquent ORM and EAV
- 5. 현재 시간을 표시하는 JavaScript의 PDF 예제?
- 6. Flex : removeEventListener 안전하게?
- 7. removeEventListener, objects and this
- 8. 변수 이름으로 javascript removeEventListener
- 9. 수없는 이유 때 removeEventListener
- 10. Jasmine 테스트 removeEventListener
- 11. Laravel Ellquent many-to-many?
- 12. Laravel Ellquent ORM이 쉬워 보였습니다
- 13. return isEven (- 숫자); Ellquent javascript
- 14. Laravel Ellquent all with relationship
- 15. Laravel Ellquent Relationship을 묻는 질문
- 16. , removeEventListener (Event.ENTER_FRAME)가 작동하지 않습니다.
- 17. 고유 한 익명 함수가있는 removeEventListener
- 18. AS3의 anon 함수에 대한 removeEventListener
- 19. JSLint를 사용하여 removeEventListener 유효성 확인
- 20. 문서에서 removeEventListener 사용이 작동하지 않습니까?
- 21. removeEventListener(),하지만 리스너가 아직 있습니다.
- 22. 다른 컨텍스트를 사용하는 콜백이있는 removeEventListener()
- 23. Eloquent Javascript의 제 6 장의 예제 6.3은 이러한 복잡성이 필요합니까?
- 24. Javascript의 setInterval() 예제 JSFiddle에서 작동하지 않는 Mozilla 문서
- 25. Laravel Ellquent 다형성 1 대 1?
- 26. Ellquent Models 반환하는 숫자 및 연관 키
- 27. Laravel Ellquent 리포지토리/서비스 디자인 패턴과의 관계
- 28. Laravel Ellquent ORM get function working Confuch
- 29. 동적으로 추가 된 요소에서 Aurelia removeEventListener
- 30. 객체 내부에서 addEventListener() 및 removeEventListener()를 관리하십시오.
"removeEventListener 메서드에 두 개의 인수가 필요하기 때문에 매개 변수를 전달하기 만합니까? *"- 아니요. 함수에 두 개의 매개 변수가 있기 때문에 임의의 값을 전달하는 것과 다릅니다. [removeEventListener]는 [문서에서 읽으십시오] (https://developer.mozilla.org/en-US/docs/Web/API)와 같이 제거 할 수신기를 알아야하기 때문에 이벤트 리스너 함수 *를 정확하게 전달합니다./EventTarget/removeEventListener). – Bergi