테스트 사이트 - 개발 중인 베타 버전입니다

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

sinbi 6년 전 조회 4,795

https://sir.kr/g4_tiptech/30590">https://sir.kr/g4_tiptech/30590

함수호출코드 : document.onkeydown = keyMenuMove;

 

위 함수 호출 구문을

홈페이지의 모든 INPUT, TEXTAREA 요소에 포커스가 안 된 경우에만 실행시키려면

어떤 식으로 조건문을 짜줘야 하는지?

 

focus, focus(), hasFocus(), activeElement .......뭔가 이런 것들을 활용할 것 같은데,

구글링 열심히 해봐도 제대로 작동 되는 게 없네요. 

 

일단, 아래처럼 해봤는데, 작동이 안 됩니다. ㅜㅜ

 

</p>

<p>if("INPUT" === document.activeElement.tagName && "TEXTAREA" === document.activeElement.tagName) {</p>

<p>} else {

    document.onkeydown = keyMenuMove;

}</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트

if 문으로 bind 자체를 걸러내시는게 아니라,

아래 코드처럼 omvKeyPressed 함수 안에서 걸러내면 될것 같습니다.

 

</p>

<p><script type="text/javascript"></p>

<p>function omvKeyPressed(e) {

    if(['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName)) {

        return;

    }</p>

<p>    // ... 나머지 내용</p>

<p>}</p>

<p>document.onkeydown = omvKeyPressed;</p>

<p></script></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

s
sinbi
6년 전
동하아빠 님, 사랑합니다. ^^*
거의 12시간 가깝게 씨름하고 있었는데.. 덕분에 한방에 해결했습니다.
진심으로 감사드립니다. ( ^ ________ ^ ) ====b
동하아빠
6년 전
아하하;;; 사랑까지는 ㅋㅋㅋ 넵 ^^

댓글을 작성하려면 로그인이 필요합니다.

6년 전

Includes는 ie에서  작동  안할텐데 indexOf를 사용해야할 듯

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sinbi
6년 전
조언 감사합니다. ^^ 코드 수정해놔야 겠네요.

댓글을 작성하려면 로그인이 필요합니다.

6년 전

질문이 약간 이상합니다.

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개

s
sinbi
6년 전
두 요소에 값을 입력해야 할 때도 방향키 설정해둔 게 작동하던 터라..애 먹고 있었네요.
출력코드를 두 요소가 포커스될 땐 안 불러오는 것만 생각했는데,
동하아빠 님 방법처럼 두 요소 경우 함수가 작동 안 되게 하는 방법이 있었네요. ㅎ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인