@@ -2,47 +2,47 @@ import EventHandler from '../../modules/event-handler.js'
22
33export function init ( id , invoke , method ) {
44 const el = document . getElementById ( id ) ;
5- const skipKeys = [ 'Enter' , 'Tab' , 'Shift' , 'Control' , 'Alt' ] ;
5+ let triggerKeydown = false ;
6+
7+ EventHandler . on ( el , 'beforeinput' , '.bb-otp-item' , e => {
8+ if ( triggerKeydown ) {
9+ return ;
10+ }
11+
12+ processKey ( el , e , e . data ) ;
13+ } ) ;
614 EventHandler . on ( el , 'input' , '.bb-otp-item' , e => {
715 const isNumber = e . target . getAttribute ( 'type' ) === 'number' ;
816 if ( isNumber && e . target . value . length > 1 ) {
917 e . target . value = e . target . value . slice ( 1 , 2 ) ;
1018 }
1119 setValue ( el , invoke , method ) ;
12- if ( e . target . value . length === 1 ) {
13- setNextFocus ( el , e . target ) ;
14- }
1520 } ) ;
1621 EventHandler . on ( el , 'keydown' , '.bb-otp-item' , e => {
1722 if ( e . ctrlKey ) {
1823 return ;
1924 }
2025
21- const isNumber = e . target . getAttribute ( 'type' ) === 'number' ;
22- if ( skipKeys . indexOf ( e . key ) > - 1 ) {
23-
24- }
25- else if ( e . key === 'Backspace' || e . key === 'ArrowLeft' ) {
26- setPrevFocus ( el , e . target ) ;
27- }
28- else if ( e . key === 'ArrowRight' ) {
29- setNextFocus ( el , e . target ) ;
26+ if ( e . key . charCodeAt ( 0 ) === 0 ) {
27+ return ;
3028 }
31- else if ( isNumber ) {
32- if ( "0123456789" . indexOf ( e . key ) > - 1 ) {
33- setNextFocus ( el , e . target ) ;
34- }
35- else {
36- e . preventDefault ( ) ;
37- }
29+ triggerKeydown = true ;
30+ processKey ( el , e , e . key ) ;
31+ } ) ;
32+ EventHandler . on ( el , 'keyup' , '.bb-otp-item' , e => {
33+ const input = event . target ;
34+ const value = e . key ;
35+
36+ if ( value === 'Backspace' || value === 'ArrowLeft' ) {
37+ setPrevFocus ( el , input ) ;
3838 }
39- else if ( "abcdefghijklmnopqrstuvwxyzABCDEDFGHIJKLMNOPQRSTUVWXYZ0123456789" . indexOf ( e . key ) > - 1 ) {
40- setNextFocus ( el , e . target ) ;
39+ else if ( value === 'ArrowRight' ) {
40+ setNextFocus ( el , input ) ;
4141 }
42- else {
43- e . preventDefault ( ) ;
42+ else if ( value === 'Delete' ) {
43+ setFocus ( input ) ;
4444 }
45- } ) ;
45+ } )
4646 EventHandler . on ( el , 'focus' , '.bb-otp-item' , e => {
4747 if ( e . target . select ) {
4848 e . target . select ( ) ;
@@ -101,9 +101,35 @@ const setFocus = target => {
101101 } , 0 ) ;
102102}
103103
104+ const processKey = ( el , event , value ) => {
105+ const skipKeys = [ 'Enter' , 'Tab' , 'Shift' , 'Control' , 'Alt' , 'Backspace' , 'ArrowLeft' , 'ArrowRight' , 'Delete' ] ;
106+ const input = event . target ;
107+ const isNumber = input . getAttribute ( 'type' ) === 'number' ;
108+
109+ if ( skipKeys . indexOf ( value ) > - 1 ) {
110+
111+ }
112+ else if ( isNumber ) {
113+ if ( "0123456789" . indexOf ( value ) > - 1 ) {
114+ setNextFocus ( el , input ) ;
115+ }
116+ else {
117+ event . preventDefault ( ) ;
118+ }
119+ }
120+ else if ( "abcdefghijklmnopqrstuvwxyzABCDEDFGHIJKLMNOPQRSTUVWXYZ0123456789" . indexOf ( value ) > - 1 ) {
121+ setNextFocus ( el , input ) ;
122+ }
123+ else {
124+ event . preventDefault ( ) ;
125+ }
126+ }
127+
104128export function dispose ( id ) {
105129 const el = document . getElementById ( id ) ;
106130 EventHandler . off ( el , 'input' ) ;
107131 EventHandler . off ( el , 'keydown' ) ;
132+ EventHandler . off ( el , 'keyup' ) ;
133+ EventHandler . off ( el , 'beforeinput' ) ;
108134 EventHandler . off ( el , 'focus' ) ;
109135}
0 commit comments