代码之家  ›  专栏  ›  技术社区  ›  Merji

在viewMode引导datetimepicker中禁用键盘导航

  •  -2
  • Merji  · 技术社区  · 7 年前

    当我设置时 viewMode 选项为“年”,我不能使用键盘键在年之间导航,即使我在默认选择的年份上按enter键,小部件也会自动关闭,而它应该移动到“月” 视图模式 视图模式

    你知道为什么它只对点击有效,而不适用于键盘导航吗?。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Merji    7 年前

    我解决这个问题的方法是根据当前的viewMode重新绑定关键点,效果很好,下面是针对任何面临相同问题的人的解决方案:

    $('#birthday').datetimepicker(
        {
            format: 'DD-MM-YYYY',
            locale:'fr',
            viewMode:'years'
        }).on('dp.show',function(e) 
        {
            document.removeEventListener("keydown", SubscripKeyDownHandler);
            $(this).data("DateTimePicker").keyBinds({
                up: function (widget) {
                    if($('#birthday').data('DateTimePicker').viewMode()=="years")
                    {
                        // console.log('years');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().subtract(4, 'y'));
                        } else {
                            this.date(this.date().clone().add(1, 'h'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="months")
                    {
                        // console.log('months');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().subtract(4, 'M'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="days")
                    {
                        // console.log('days');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().subtract(7, 'd'));
                        } else {
                            this.date(this.date().clone().add(1, 'm'));
                        }
                    }
                },
                down: function (widget) {
                    if($('#birthday').data('DateTimePicker').viewMode()=="years")
                    {
                        // console.log('years');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().add(4, 'y'));
                        } else {
                            this.date(this.date().clone().subtract(1, 'h'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="months")
                    {
                        // console.log('months');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().add(4, 'M'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="days")
                    {
                        // console.log('days');
                        if (!widget) {
                            this.show();
                        }
                        else if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().add(7, 'd'));
                        } else {
                            this.date(this.date().clone().subtract(1, 'm'));
                        }
                    }
                },
                left: function (widget) {
                    if($('#birthday').data('DateTimePicker').viewMode()=="years")
                    {
                        // console.log('years');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().subtract(1, 'y'));
                        } else {
                            this.date(this.date().clone().add(1, 'h'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="months")
                    {
                        // console.log('months');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().subtract(1, 'M'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="days")
                    {
                        // console.log('days');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().subtract(1, 'd'));
                        }
                    }
                },
                right: function (widget) {
                    if($('#birthday').data('DateTimePicker').viewMode()=="years")
                    {
                        // console.log('years');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().add(1, 'y'));
                        } else {
                            this.date(this.date().clone().subtract(1, 'h'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="months")
                    {
                        // console.log('months');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().add(1, 'M'));
                        }
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="days")
                    {
                        // console.log('days');
                        if (widget.find('.datepicker').is(':visible')) {
                            this.date(this.date().clone().add(1, 'd'));
                        }
                    }
                },
                enter: function (widget) {
                    if($('#birthday').data('DateTimePicker').viewMode()=="years")
                    {
                        setTimeout(function(){
                            $('#birthday').data('DateTimePicker').viewMode('months');
                          },1);
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="months")
                    {
                        setTimeout(function(){
                            $('#birthday').data('DateTimePicker').viewMode('days');
                          },1);
                    }
                    else if($('#birthday').data('DateTimePicker').viewMode()=="days")
                    {
                        this.hide();
                    }
                    console.log($('#birthday').data('DateTimePicker').viewMode());
                }
            });
        }).on('dp.hide',function(e)
        {
            //You can add this line of code to fix this issue:
            //The year viewMode is set the first time you open the datetimepicker 
            //and can't be set if you opened it again 
            setTimeout(function(){
                $('#birthday').data('DateTimePicker').viewMode('years');
              },1);
            document.addEventListener("keydown", SubscripKeyDownHandler);
        }).on("dp.change", function (e) {
        });