How to set focus to material date picker inside a bootstrap modal?












0















So currently I'm tasked with making sure the content on my website is web accessible according to WCAG 2.0 standards. One of the main points of this requirement is that the web page must be accessible using the tab key. That is if I want to move forward through the form, I can use tab to move to the next field and shift tab to move back to the the previous field.



Now one of the issues I'm having is getting the material date picker to focus on the calendar when it appears. From what I could tell, the focus doesn't go to the the calendar instead it stays within the modal form. That is when I try to press tab on while the date picker is open, it cycles through the modal form instead of the calendar. What I want instead to be able to cycle through the calendar.



Here is what I'm using to setup the date picker.



<div class="col-md-6">
<mat-form-field>
<input matInput [matDatepicker]="picker" [min]="fromMinDate" [max]="curDate" readonly="readonly" (click)="openMinTaxCalendar(picker); trapEventFocus($event);" #minEffectiveYear (ngModelChange)="setToDate($event)" placeholder="YYYY/MM/DD" [(ngModel)]="effectiveDateFrom">
<mat-datepicker-toggle matSuffix [for]="picker1" (closed)="closedMinTaxCalendar($event)"></mat-datepicker-toggle>
<mat-datepicker #picker ></mat-datepicker>
</mat-form-field>
</div>




I have tried various methods such as applying cdkFocusInitial to the



<input matInput ....> </input> 


but this doesn't seem to be doing anything.



I also tried applying (focus)="picker.open" However this seems to automatically open the calendar, while not setting the appropriate focus. In my code snippet above, the trapEventFocus($event) method also fails to fire.



If anyone has any suggestions it would be greatly appreciated.










share|improve this question



























    0















    So currently I'm tasked with making sure the content on my website is web accessible according to WCAG 2.0 standards. One of the main points of this requirement is that the web page must be accessible using the tab key. That is if I want to move forward through the form, I can use tab to move to the next field and shift tab to move back to the the previous field.



    Now one of the issues I'm having is getting the material date picker to focus on the calendar when it appears. From what I could tell, the focus doesn't go to the the calendar instead it stays within the modal form. That is when I try to press tab on while the date picker is open, it cycles through the modal form instead of the calendar. What I want instead to be able to cycle through the calendar.



    Here is what I'm using to setup the date picker.



    <div class="col-md-6">
    <mat-form-field>
    <input matInput [matDatepicker]="picker" [min]="fromMinDate" [max]="curDate" readonly="readonly" (click)="openMinTaxCalendar(picker); trapEventFocus($event);" #minEffectiveYear (ngModelChange)="setToDate($event)" placeholder="YYYY/MM/DD" [(ngModel)]="effectiveDateFrom">
    <mat-datepicker-toggle matSuffix [for]="picker1" (closed)="closedMinTaxCalendar($event)"></mat-datepicker-toggle>
    <mat-datepicker #picker ></mat-datepicker>
    </mat-form-field>
    </div>




    I have tried various methods such as applying cdkFocusInitial to the



    <input matInput ....> </input> 


    but this doesn't seem to be doing anything.



    I also tried applying (focus)="picker.open" However this seems to automatically open the calendar, while not setting the appropriate focus. In my code snippet above, the trapEventFocus($event) method also fails to fire.



    If anyone has any suggestions it would be greatly appreciated.










    share|improve this question

























      0












      0








      0








      So currently I'm tasked with making sure the content on my website is web accessible according to WCAG 2.0 standards. One of the main points of this requirement is that the web page must be accessible using the tab key. That is if I want to move forward through the form, I can use tab to move to the next field and shift tab to move back to the the previous field.



      Now one of the issues I'm having is getting the material date picker to focus on the calendar when it appears. From what I could tell, the focus doesn't go to the the calendar instead it stays within the modal form. That is when I try to press tab on while the date picker is open, it cycles through the modal form instead of the calendar. What I want instead to be able to cycle through the calendar.



      Here is what I'm using to setup the date picker.



      <div class="col-md-6">
      <mat-form-field>
      <input matInput [matDatepicker]="picker" [min]="fromMinDate" [max]="curDate" readonly="readonly" (click)="openMinTaxCalendar(picker); trapEventFocus($event);" #minEffectiveYear (ngModelChange)="setToDate($event)" placeholder="YYYY/MM/DD" [(ngModel)]="effectiveDateFrom">
      <mat-datepicker-toggle matSuffix [for]="picker1" (closed)="closedMinTaxCalendar($event)"></mat-datepicker-toggle>
      <mat-datepicker #picker ></mat-datepicker>
      </mat-form-field>
      </div>




      I have tried various methods such as applying cdkFocusInitial to the



      <input matInput ....> </input> 


      but this doesn't seem to be doing anything.



      I also tried applying (focus)="picker.open" However this seems to automatically open the calendar, while not setting the appropriate focus. In my code snippet above, the trapEventFocus($event) method also fails to fire.



      If anyone has any suggestions it would be greatly appreciated.










      share|improve this question














      So currently I'm tasked with making sure the content on my website is web accessible according to WCAG 2.0 standards. One of the main points of this requirement is that the web page must be accessible using the tab key. That is if I want to move forward through the form, I can use tab to move to the next field and shift tab to move back to the the previous field.



      Now one of the issues I'm having is getting the material date picker to focus on the calendar when it appears. From what I could tell, the focus doesn't go to the the calendar instead it stays within the modal form. That is when I try to press tab on while the date picker is open, it cycles through the modal form instead of the calendar. What I want instead to be able to cycle through the calendar.



      Here is what I'm using to setup the date picker.



      <div class="col-md-6">
      <mat-form-field>
      <input matInput [matDatepicker]="picker" [min]="fromMinDate" [max]="curDate" readonly="readonly" (click)="openMinTaxCalendar(picker); trapEventFocus($event);" #minEffectiveYear (ngModelChange)="setToDate($event)" placeholder="YYYY/MM/DD" [(ngModel)]="effectiveDateFrom">
      <mat-datepicker-toggle matSuffix [for]="picker1" (closed)="closedMinTaxCalendar($event)"></mat-datepicker-toggle>
      <mat-datepicker #picker ></mat-datepicker>
      </mat-form-field>
      </div>




      I have tried various methods such as applying cdkFocusInitial to the



      <input matInput ....> </input> 


      but this doesn't seem to be doing anything.



      I also tried applying (focus)="picker.open" However this seems to automatically open the calendar, while not setting the appropriate focus. In my code snippet above, the trapEventFocus($event) method also fails to fire.



      If anyone has any suggestions it would be greatly appreciated.







      angular bootstrap-modal angular4-forms






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 19:56









      craexuscraexus

      276




      276
























          1 Answer
          1






          active

          oldest

          votes


















          0














          I have found that using the following setup yields good keyboard results and forces the user to select a date value by only using the datepicker.



          <mat-form-field
          (click)="picker?.open()"
          style="cursor: pointer"
          >
          <input
          matInput
          [ngModel]="dateField.value | date: 'yyyy/MM/dd'"
          [min]="fromMinDate"
          [max]="curDate"
          placeholder="YYYY/MM/DD"
          name="dateFieldView"
          style="cursor: pointer"
          (focus)="picker?.open()"
          readonly
          />
          <input
          matInput
          [matDatepicker]="picker"
          [ngModel]="effectiveDateFrom"
          name="dateField"
          #dateField
          required
          hidden
          />
          <mat-datepicker-toggle
          matSuffix
          [for]="picker"
          ></mat-datepicker-toggle>
          <mat-datepicker #picker></mat-datepicker>
          </mat-form-field>


          Stackblitz






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53307885%2fhow-to-set-focus-to-material-date-picker-inside-a-bootstrap-modal%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            I have found that using the following setup yields good keyboard results and forces the user to select a date value by only using the datepicker.



            <mat-form-field
            (click)="picker?.open()"
            style="cursor: pointer"
            >
            <input
            matInput
            [ngModel]="dateField.value | date: 'yyyy/MM/dd'"
            [min]="fromMinDate"
            [max]="curDate"
            placeholder="YYYY/MM/DD"
            name="dateFieldView"
            style="cursor: pointer"
            (focus)="picker?.open()"
            readonly
            />
            <input
            matInput
            [matDatepicker]="picker"
            [ngModel]="effectiveDateFrom"
            name="dateField"
            #dateField
            required
            hidden
            />
            <mat-datepicker-toggle
            matSuffix
            [for]="picker"
            ></mat-datepicker-toggle>
            <mat-datepicker #picker></mat-datepicker>
            </mat-form-field>


            Stackblitz






            share|improve this answer




























              0














              I have found that using the following setup yields good keyboard results and forces the user to select a date value by only using the datepicker.



              <mat-form-field
              (click)="picker?.open()"
              style="cursor: pointer"
              >
              <input
              matInput
              [ngModel]="dateField.value | date: 'yyyy/MM/dd'"
              [min]="fromMinDate"
              [max]="curDate"
              placeholder="YYYY/MM/DD"
              name="dateFieldView"
              style="cursor: pointer"
              (focus)="picker?.open()"
              readonly
              />
              <input
              matInput
              [matDatepicker]="picker"
              [ngModel]="effectiveDateFrom"
              name="dateField"
              #dateField
              required
              hidden
              />
              <mat-datepicker-toggle
              matSuffix
              [for]="picker"
              ></mat-datepicker-toggle>
              <mat-datepicker #picker></mat-datepicker>
              </mat-form-field>


              Stackblitz






              share|improve this answer


























                0












                0








                0







                I have found that using the following setup yields good keyboard results and forces the user to select a date value by only using the datepicker.



                <mat-form-field
                (click)="picker?.open()"
                style="cursor: pointer"
                >
                <input
                matInput
                [ngModel]="dateField.value | date: 'yyyy/MM/dd'"
                [min]="fromMinDate"
                [max]="curDate"
                placeholder="YYYY/MM/DD"
                name="dateFieldView"
                style="cursor: pointer"
                (focus)="picker?.open()"
                readonly
                />
                <input
                matInput
                [matDatepicker]="picker"
                [ngModel]="effectiveDateFrom"
                name="dateField"
                #dateField
                required
                hidden
                />
                <mat-datepicker-toggle
                matSuffix
                [for]="picker"
                ></mat-datepicker-toggle>
                <mat-datepicker #picker></mat-datepicker>
                </mat-form-field>


                Stackblitz






                share|improve this answer













                I have found that using the following setup yields good keyboard results and forces the user to select a date value by only using the datepicker.



                <mat-form-field
                (click)="picker?.open()"
                style="cursor: pointer"
                >
                <input
                matInput
                [ngModel]="dateField.value | date: 'yyyy/MM/dd'"
                [min]="fromMinDate"
                [max]="curDate"
                placeholder="YYYY/MM/DD"
                name="dateFieldView"
                style="cursor: pointer"
                (focus)="picker?.open()"
                readonly
                />
                <input
                matInput
                [matDatepicker]="picker"
                [ngModel]="effectiveDateFrom"
                name="dateField"
                #dateField
                required
                hidden
                />
                <mat-datepicker-toggle
                matSuffix
                [for]="picker"
                ></mat-datepicker-toggle>
                <mat-datepicker #picker></mat-datepicker>
                </mat-form-field>


                Stackblitz







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 14 '18 at 20:37









                Teddy SterneTeddy Sterne

                7,32611729




                7,32611729
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53307885%2fhow-to-set-focus-to-material-date-picker-inside-a-bootstrap-modal%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Xamarin.iOS Cant Deploy on Iphone

                    Glorious Revolution

                    Dulmage-Mendelsohn matrix decomposition in Python