@@ -4,15 +4,28 @@ const CONFIG_KEY = core.CONFIG_KEY
44export default {
55 bind : ( el , { value, modifiers } , vnode ) => {
66 el = core . getInputElement ( el )
7- el . addEventListener ( 'input' , core . inputHandler , true )
8-
97 const config = core . normalizeConfig ( value , modifiers )
108 el [ CONFIG_KEY ] = { config }
119
1210 // set initial value
1311 core . updateValue ( el , vnode , { force : config . prefill } )
1412 } ,
1513
14+ inserted : ( el ) => {
15+ el = core . getInputElement ( el )
16+ const config = el [ CONFIG_KEY ]
17+ // prefer adding event listener to parent element to avoid Firefox bug which does not
18+ // execute `useCapture: true` event handlers before non-capturing event handlers
19+ const handlerOwner = el . parentElement || el
20+
21+ // use anonymous event handler to avoid inadvertently removing masking for all inputs within a container
22+ const handler = ( e ) => core . inputHandler ( e )
23+
24+ handlerOwner . addEventListener ( 'input' , handler , true )
25+
26+ config . cleanup = ( ) => handlerOwner . removeEventListener ( 'input' , handler , true )
27+ } ,
28+
1629 update : ( el , { value, oldValue, modifiers } , vnode ) => {
1730 el = core . getInputElement ( el )
1831
@@ -24,5 +37,7 @@ export default {
2437 }
2538 } ,
2639
27- unbind : ( el ) => el . removeEventListener ( 'input' , core . inputHandler , true )
40+ unbind : ( el ) => {
41+ core . getInputElement ( el ) [ CONFIG_KEY ] . cleanup ( )
42+ }
2843}
0 commit comments