웹 애플리케이션을 네이티브 앱의 웹뷰(WebView) 내에서 사용할 때, 입력 필드에 포커스가 갈 경우 나타나는 키보드를 제어하는 것은 중요한 사용자 경험 요소 중 하나입니다. 이번 글에서는 enterKeyHint와 inputMode 속성을 활용하여 키보드의 동작을 세밀하게 제어하는 방법을 알아보겠습니다. 이 방법은 iOS와 Android 모두 동일하게 적용됩니다.
enterKeyHint와 inputMode 속성은 각각 입력 필드의 키보드 동작과 입력 모드를 설정하는 데 사용됩니다.
enterKeyHint 속성은 가상 키보드의 Enter
키에 표시될 힌트를 설정합니다. 이를 통해 사용자는 현재 입력 필드의 목적에 맞는 키보드 액션을 직관적으로 이해할 수 있습니다.
📌 다만, enterKeyHint는 키에 표시되는 문구만 변경이 가능하며, 실제 동작 로직은 별도로 구현해야 합니다.
가능한 값
search
: 검색enter
: 일반적인 엔터done
: 완료go
: 이동next
: 다음 입력 필드로 이동previous
: 이전 입력 필드로 이동send
: 전송예시
<Input
type="text"
enterKeyHint="next"
onKeyDown={(event) => onKeyDown(event, 'password')}
/>
inputMode 속성은 입력 필드에 적합한 키보드 타입을 설정합니다. 이를 통해 사용자 입력의 정확성과 편의성을 높일 수 있습니다.
가능한 값
none
: 가상 키보드를 숨김text
: 일반적인 텍스트 입력decimal
: 소수 입력numeric
: 숫자 입력tel
: 전화번호 입력search
: 검색email
: 이메일 주소 입력url
: URL 입력예시
<Input
type="text"
inputMode="email"
onKeyDown={(event) => onKeyDown(event, 'email')}
/>
위의 예시에서 inputMode="email"로 설정하면, 이메일 입력에 적합한 키보드가 표시됩니다.
아래는 enterKeyHint와 inputMode 속성을 사용하여 키보드 동작을 제어하는 예시 코드입니다.
/** input onKeyDown 이벤트 핸들러 */
const onKeyDown = (
event: KeyboardEvent<HTMLInputElement>,
name: keyof ConfirmPasswordFormType,
) => {
if (event.key === 'Enter') {
event.preventDefault();
switch (name) {
case 'password':
setFocus('confirm_password'); // confirm_password 필드로 포커스 지정
break;
case 'confirm_password':
(event.target as HTMLInputElement).blur();
if (isValid) onSubmit(); // 폼 유효성 통과일 경우 폼 제출
else return false;
break;
}
}
};
return (
<form>
<Input
type="password"
enterKeyHint="next"
inputMode="text"
onKeyDown={(event) => onKeyDown(event, 'password')}
/>
<Input
type="password"
enterKeyHint="done"
inputMode="text"
onKeyDown={(event) => onKeyDown(event, 'confirm_password')}
/>
</form>
);
⭐ HTMLInputElement.blur()