순수 JS로 input,textarea 요소에 포커스가 안 된 경우만 실행하려면?

순수 JS로 input,textarea 요소에 포커스가 안 된 경우만 실행하려면?

QA

순수 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를 사용해야할 듯

답변을 작성하시기 전에 로그인 해주세요.
전체 177
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT