순수 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>
답변에 대한 댓글 2개
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
질문이 약간 이상합니다.
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();"> 이런식으로 서로 함수를 달리쓰면 될것 같네요.
답변에 대한 댓글 1개
출력코드를 두 요소가 포커스될 땐 안 불러오는 것만 생각했는데,
동하아빠 님 방법처럼 두 요소 경우 함수가 작동 안 되게 하는 방법이 있었네요. ㅎ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
거의 12시간 가깝게 씨름하고 있었는데.. 덕분에 한방에 해결했습니다.
진심으로 감사드립니다. ( ^ ________ ^ ) ====b