Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

425
Visualizações
Close ng-bootstrap date picker when click outside in angular2

I am using bootstrap4 datepicker https://ng-bootstrap.github.io/#/components/datepicker

I want to close datepicker when click outside of calendar. Right now when user select date then it will close.

My HTML file code is below:

<input ngbDatepicker #d="ngbDatepicker" (click)="d.toggle();" [formControl]="eventForm.controls['event_date']" value="12/03/2017" type="text" [readonly]="true" autocomplete="off">  

I try to adding (click)="d.close();" in body tag. But it's also close when i try to change month and year from calendar.
What change i have to do either in HTML or component to close this datepicker when user click outside of calendar?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Yea, I had the same problem... This works well for me:

component HTML:

<input placeholder="{{ task.deadline.year }}-{{ task.deadline.month }}-{{ task.deadline.day }}" name="date" id="date" [(ngModel)]="task.deadline" ngbDatepicker  #d="ngbDatepicker" (click)="!completed && d.toggle(); $event.stopPropagation();" (document:click)="closeFix($event, d)" readonly>

and the TS (the only thing that you need is the closeFix() function):

closeFix(event, datePicker) {
  if(event.target.offsetParent == null)
    datePicker.close();
  else if(event.target.offsetParent.nodeName != "NGB-DATEPICKER")
    datePicker.close();
}
over 4 years ago · Santiago Trujillo Relatório

0

You can use the on-mouseleave event to close the datepicker when the user leave the div

<input on-mouseleave="d.close()" ngbDatepicker #d="ngbDatepicker" (click)="d.toggle();" [formControl]="eventForm.controls['event_date']" value="12/03/2017" type="text" [readonly]="true" autocomplete="off">  

Have a nice day!

over 4 years ago · Santiago Trujillo Relatório

0

In your component.ts,

    import { ViewChild } from '@angular/core';

    @Component({
      host: {
        '(document:click)': 'closeDatepicker($event)',
      }
    })

    export class MyComponent {
      @ViewChild('d') eventDate;

      closeDatepicker(e) {
        if (!this.eventDate.isOpen() || (e.target.id === 'd' && e.target.id === 'dropdown-icon')
          || (e.target.offsetParent && e.target.offsetParent.localName.includes('ngb-datepicker'))
          || !(e.target.parentElement && e.target.parentElement.parentElement &&
            !e.target.parentElement.parentElement.localName.includes('ngb-datepicker'))) {
          return;
        }
        if (this.eventDate.isOpen() && e.target.id !== 'd' && e.target.id !== 'dropdown-icon') {
          this.eventDate.close();
        }
      }
    }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda