순수 JS로 input,textarea 요소에 포커스가 안 된 경우만 실행하려면?
본문
https://sir.kr/g4_tiptech/30590
함수호출코드 : document.onkeydown = keyMenuMove;
위 함수 호출 구문을
홈페이지의 모든 INPUT, TEXTAREA 요소에 포커스가 안 된 경우에만 실행시키려면
어떤 식으로 조건문을 짜줘야 하는지?
focus, focus(), hasFocus(), activeElement .......뭔가 이런 것들을 활용할 것 같은데,
구글링 열심히 해봐도 제대로 작동 되는 게 없네요.
일단, 아래처럼 해봤는데, 작동이 안 됩니다. ㅜㅜ
if("INPUT" === document.activeElement.tagName && "TEXTAREA" === document.activeElement.tagName) {
} else {
document.onkeydown = keyMenuMove;
}
답변 3
if 문으로 bind 자체를 걸러내시는게 아니라,
아래 코드처럼 omvKeyPressed 함수 안에서 걸러내면 될것 같습니다.
<script type="text/javascript">
function omvKeyPressed(e) {
if(['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName)) {
return;
}
// ... 나머지 내용
}
document.onkeydown = omvKeyPressed;
</script>
질문이 약간 이상합니다.
INPUT, TEXTAREA 요소에 포커스가 안 된 경우에만 실행
이벤트 onkeydown 이 일어나는 경우 포커스는 그곳이 있어야만 하겠지요.
즉 <input type=text onkeydown="javascript"> <<< 이곳에 포커스가 있어야만 키다운이 이곳에서 일어나죠. 절대로 textarea에는 포커스가 있을수 없습니다.
아마도
function action_keydown() { ................. } 이런 함수를 쓰시는 것 같은데
function action_keydown_textarea() { ................. } 이렇게 위와 거의 동일하지만 몇가지를 뺀 함수를 만들어
<input type=text onkeydown="action_keydown();">
<textarea onkeydown="action_keydown_textarea();"> 이런식으로 서로 함수를 달리쓰면 될것 같네요.
Includes는 ie에서 작동 안할텐데 indexOf를 사용해야할 듯