@@ -40,6 +40,7 @@ export class CheckBox extends Component<HTMLInputElement> implements INotifyProp
4040 private formElement : HTMLElement ;
4141 private initialCheckedValue : boolean ;
4242 private wrapper : Element ;
43+ private clickTriggered : boolean = false ;
4344
4445 /**
4546 * Triggers when the CheckBox state has been changed by user interaction.
@@ -195,6 +196,14 @@ export class CheckBox extends Component<HTMLInputElement> implements INotifyProp
195196 }
196197
197198 private clickHandler ( event : Event ) : void {
199+ if ( ( event . target as HTMLElement ) . tagName === 'INPUT' && this . clickTriggered ) {
200+ event . stopPropagation ( ) ;
201+ this . clickTriggered = false ;
202+ return ;
203+ }
204+ if ( ( event . target as HTMLElement ) . tagName === 'SPAN' || ( event . target as HTMLElement ) . tagName === 'LABEL' ) {
205+ this . clickTriggered = true ;
206+ }
198207 if ( this . isMouseClick ) {
199208 this . focusOutHandler ( ) ;
200209 this . isMouseClick = false ;
@@ -461,7 +470,6 @@ export class CheckBox extends Component<HTMLInputElement> implements INotifyProp
461470 */
462471 protected preRender ( ) : void {
463472 let element : HTMLInputElement = this . element ;
464- this . formElement = < HTMLFormElement > closest ( this . element , 'form' ) ;
465473 this . tagName = this . element . tagName ;
466474 element = wrapperInitialize ( this . createElement , 'EJS-CHECKBOX' , 'checkbox' , element , WRAPPER , 'checkbox' ) ;
467475 this . element = element ;
@@ -529,15 +537,16 @@ export class CheckBox extends Component<HTMLInputElement> implements INotifyProp
529537
530538 protected unWireEvents ( ) : void {
531539 const wrapper : Element = this . wrapper ;
532- EventHandler . remove ( this . element , 'click' , this . clickHandler ) ;
540+ EventHandler . remove ( wrapper , 'click' , this . clickHandler ) ;
533541 EventHandler . remove ( this . element , 'keyup' , this . keyUpHandler ) ;
534542 EventHandler . remove ( this . element , 'focus' , this . focusHandler ) ;
535543 EventHandler . remove ( this . element , 'focusout' , this . focusOutHandler ) ;
536544 const label : Element = wrapper . getElementsByTagName ( 'label' ) [ 0 ] ;
537545 EventHandler . remove ( label , 'mousedown' , this . labelMouseDownHandler ) ;
538546 EventHandler . remove ( label , 'mouseup' , this . labelMouseUpHandler ) ;
539- if ( this . formElement ) {
540- EventHandler . remove ( this . formElement , 'reset' , this . formResetHandler ) ;
547+ const formElem : HTMLFormElement = < HTMLFormElement > closest ( this . element , 'form' ) ;
548+ if ( formElem ) {
549+ EventHandler . remove ( formElem , 'reset' , this . formResetHandler ) ;
541550 }
542551 if ( this . tagName === 'EJS-CHECKBOX' ) {
543552 EventHandler . remove ( this . element , 'change' , this . changeHandler ) ;
@@ -547,15 +556,16 @@ export class CheckBox extends Component<HTMLInputElement> implements INotifyProp
547556
548557 protected wireEvents ( ) : void {
549558 const wrapper : Element = this . getWrapper ( ) ;
550- EventHandler . add ( this . element , 'click' , this . clickHandler , this ) ;
559+ EventHandler . add ( wrapper , 'click' , this . clickHandler , this ) ;
551560 EventHandler . add ( this . element , 'keyup' , this . keyUpHandler , this ) ;
552561 EventHandler . add ( this . element , 'focus' , this . focusHandler , this ) ;
553562 EventHandler . add ( this . element , 'focusout' , this . focusOutHandler , this ) ;
554563 const label : Element = wrapper . getElementsByTagName ( 'label' ) [ 0 ] ;
555564 EventHandler . add ( label , 'mousedown' , this . labelMouseDownHandler , this ) ;
556565 EventHandler . add ( label , 'mouseup' , this . labelMouseUpHandler , this ) ;
557- if ( this . formElement ) {
558- EventHandler . add ( this . formElement , 'reset' , this . formResetHandler , this ) ;
566+ const formElem : HTMLFormElement = < HTMLFormElement > closest ( this . element , 'form' ) ;
567+ if ( formElem ) {
568+ EventHandler . add ( formElem , 'reset' , this . formResetHandler , this ) ;
559569 }
560570 if ( this . tagName === 'EJS-CHECKBOX' ) {
561571 EventHandler . add ( this . element , 'change' , this . changeHandler , this ) ;
0 commit comments