Kudos
Collect
Twiiter
Facebook
Share
Develop somethings, meditation, reading and thinking...

폼의 요소에 포커스 주기 - JavaScript

마지막 업데이트 3년 전
0 0 0 0

폼 입력에서 JavaScript 로 포커스를 임의로 조정해야 할 필요가 종종 있는데, 예상치 못한 상황이 발생할 수 있어 기록해 둔다.

폼의 첫번째 요소에 포커스 주기

<form id="myform" action="save.php" method="post">
  <input name="firstname">
  <input name="lastname">
  <input name="age">
</form>

이러한 폼이 있을때,

var aFormElement = document.getElementById("myform");
aFormElement.elements[0].focus();

이렇게 하면 대부분 문제 없이 첫번째 요소로 포커스를 옮길 수 있다.

하지만, 다음과 같이 폼의 첫번째 요소로 hidden 타입이 설정되어 있을 경우에는, 이 보이지 않는 요소로 포커스가 옮겨지게 되어 화면상에서는 아무런 변화가 없는 것 처럼 나타난다.

<form action="save.php" method="post">
  <input type="hidden" name="goto" value="home.php">
  <input name="firstname">
  <input name="lastname">
  <input name="age">
</form>

이럴 때에는 다음과 같이 명확하게 hidden 요소를 제외하고 선택해 준다.

var aFormElement = document.getElementById("myform");
aFormElement.querySelectorAll('input:not([type=hidden])')[0].focus();

이 방법이 복잡할 경우 간단하게 hidden 타입의 요소를 폼의 가장 뒤에 두는 방법도 있다.

폼의 마지막 요소에 포커스 주기

이를 응용하면 마지막 요소에 포커스를 주는 방법도 간단히 해결된다.

var aFormElement      = document.getElementById("myform");
var fromChildElements = aFormElement.querySelectorAll('input:not([type=hidden])');
var firstElement      = fromChildElements[0];
var lastElement       = fromChildElements[fromChildElements.length - 1];

firstElement.focus();
lastElement.focus();

필요한 요소만 선택하여 지정하기 (응용예제)

aFormElement.querySelectorAll('input:not([type=hidden]), select, textarea, button, [tabindex]:not([tabindex="-1"])')[0].focus();

이런식으로 정확하게 필요한 요소만 지정해서 사용할 수도 있다.

폼 리셋하기

var aFormElement = document.getElementById("myform");
aFormElement.reset();

Vue 의 v-bind 와 함께 사용한다면, 명시적으로 값을 비워줘야 제대로 동작한다. 브라우저가 값을 기억하는 경우에도 마찬가지로 명시적으로 리셋해 주면 되겠다.

var aFormElement = document.getElementById("myform");
this.firstname   = '';
this.lastname    = '';
this.age         = '';
aFormElement.reset();

Hi, my name is Richard. I’m a developer wants to make the world better with logic power. Mainly I use Linux, Nginx, MySQL, PHP and JavaScript . I want to share my knowledge with someone that it was also based from some great persons via LYNMP. 👨‍💻

Essedrop - 이미지 주소를 만드는 가장 빠른 방법
 

독자 의견

저자 @richard 에게 의견 남기기:

Please sign in to comment.
Markdown is also available in comment.