@@ -2,47 +2,40 @@ import EventHandler from '../../modules/event-handler.js'
22
33export function init ( id , invoke , method ) {
44 const el = document . getElementById ( id ) ;
5- let triggerKeydown = false ;
5+ const totalInputs = [ ... el . querySelectorAll ( '.bb-otp-item' ) ] ;
66
7- EventHandler . on ( el , 'beforeinput' , '.bb-otp-item' , e => {
8- if ( triggerKeydown ) {
9- return ;
10- }
11-
12- processKey ( el , e , e . data ) ;
13- } ) ;
147 EventHandler . on ( el , 'input' , '.bb-otp-item' , e => {
158 const isNumber = e . target . getAttribute ( 'type' ) === 'number' ;
16- if ( isNumber && e . target . value . length > 1 ) {
17- e . target . value = e . target . value . slice ( 1 , 2 ) ;
9+ let value = e . target . value ;
10+ if ( value . length > 1 ) {
11+ value = value . slice ( 1 , 2 ) ;
1812 }
19- setValue ( el , invoke , method ) ;
20- } ) ;
21- EventHandler . on ( el , 'keydown' , '.bb-otp-item' , e => {
22- if ( e . ctrlKey ) {
13+
14+ if ( isNumber && "0123456789" . indexOf ( value ) === - 1 ) {
15+ e . target . value = '' ;
2316 return ;
2417 }
2518
26- if ( e . key . charCodeAt ( 0 ) === 0 ) {
19+ if ( "abcdefghijklmnopqrstuvwxyzABCDEDFGHIJKLMNOPQRSTUVWXYZ0123456789" . indexOf ( value ) === - 1 ) {
20+ e . target . value = '' ;
2721 return ;
2822 }
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 ;
3523
36- if ( value === 'Backspace' || value === 'ArrowLeft' ) {
37- setPrevFocus ( el , input ) ;
24+ e . target . value = value ;
25+
26+ if ( value . length === 1 ) {
27+ setNextFocus ( el , e . target ) ;
3828 }
39- else if ( value === 'ArrowRight' ) {
40- setNextFocus ( el , input ) ;
29+ setValue ( el , invoke , method ) ;
30+ } ) ;
31+ EventHandler . on ( el , 'keydown' , '.bb-otp-item' , e => {
32+ if ( e . key === 'Backspace' || e . key === 'ArrowLeft' ) {
33+ setPrevFocus ( el , e . target ) ;
4134 }
42- else if ( value === 'Delete ' ) {
43- setFocus ( input ) ;
35+ else if ( e . key === 'ArrowRight ' ) {
36+ setNextFocus ( el , e . target ) ;
4437 }
45- } )
38+ } ) ;
4639 EventHandler . on ( el , 'focus' , '.bb-otp-item' , e => {
4740 if ( e . target . select ) {
4841 e . target . select ( ) ;
@@ -72,7 +65,7 @@ export function init(id, invoke, method) {
7265}
7366
7467const setValue = ( el , invoke , method ) => {
75- const val = [ ...el . querySelectorAll ( '.bb-otp-item' ) ] . map ( input => input . value ) . join ( '' ) ;
68+ const val = [ ...el . querySelectorAll ( '.bb-otp-item' ) ] . map ( input => input . value ) ;
7669 invoke . invokeMethodAsync ( method , val ) ;
7770}
7871
@@ -98,38 +91,13 @@ const setFocus = target => {
9891 if ( target . focus ) {
9992 target . focus ( ) ;
10093 }
101- } , 0 ) ;
102- }
103-
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- }
94+ } , 10 ) ;
12695}
12796
12897export function dispose ( id ) {
12998 const el = document . getElementById ( id ) ;
13099 EventHandler . off ( el , 'input' ) ;
131100 EventHandler . off ( el , 'keydown' ) ;
132- EventHandler . off ( el , 'keyup' ) ;
133- EventHandler . off ( el , 'beforeinput' ) ;
134101 EventHandler . off ( el , 'focus' ) ;
102+ EventHandler . off ( el , 'paste' ) ;
135103}
0 commit comments