Jquery Ui Datepicker 月/年下拉菜单在最新的 Firefox 弹出窗口中不起作用

问题描述 投票:0回答:9

不知何故,我的 jQuery UI Datepicker 月/年下拉菜单在最新的 Firefox 中的任何弹出窗口中都不起作用。

当我单击“月”或“年”下拉菜单时,选项列表不会出现。

这是我的弹出窗口和日期选择器代码:

$( "#dialog-form" ).dialog({
    modal: true
});

$("#datepicker").datepicker({
    changeMonth: true,
    changeYear: true
});

我也在 JSfiddle 上准备了一个演示:

http://jsfiddle.net/469zV/2/

javascript jquery html jquery-ui datepicker
9个回答
24
投票

这是因为模式强制将焦点集中在自身上。这是here提到的解决方案。将以下脚本添加到您的 js 文件中。就是这样。

jsfiddle:http://jsfiddle.net/surjithctly/93eTU/16/

参考:Twitter 引导多模态错误

// Since confModal is essentially a nested modal it's enforceFocus method
// must be no-op'd or the following error results 
// "Uncaught RangeError: Maximum call stack size exceeded"
// But then when the nested modal is hidden we reset modal.enforceFocus
var enforceModalFocusFn = $.fn.modal.Constructor.prototype.enforceFocus;

$.fn.modal.Constructor.prototype.enforceFocus = function() {};

$confModal.on('hidden', function() {
    $.fn.modal.Constructor.prototype.enforceFocus = enforceModalFocusFn;
});

$confModal.modal({ backdrop : false });

对于 Bootstrap 4:

replace : $.fn.modal.Constructor.prototype.enforceFocus
By: $.fn.modal.Constructor.prototype._enforceFocus

18
投票

我必须使用

$.fn.modal.Constructor.prototype.enforceFocus = function () {
$(document)
  .off('focusin.bs.modal') // guard against infinite focus loop
  .on('focusin.bs.modal', $.proxy(function (e) {
    if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
      this.$element.focus()
    }
  }, this))
}

当我们使用 Tab 来聚焦元素时,为了将焦点限制在模型内部(来自 GIT)。

尝试过这个>>

$("#dateOfBirth").datepicker({
    beforeShow: function(input, inst) {
        $(document).off('focusin.bs.modal');
    },
    onClose:function(){
        $(document).on('focusin.bs.modal');
    },
    changeYear: true,
    yearRange : '-150:+0'
});

现在我可以选择年份了:)


3
投票

理想的解决方案是将日期选择器弹出 div 移动到模式对话框内。

$("#dialog-form").dialog({
    modal: true,
    width: 500,
    height: 500
});

$("#datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    beforeShow: function(el, dp) {
          $(el).parent().append($('#ui-datepicker-div'));
          $('#ui-datepicker-div').hide();
        }    
    }
});

注意:必须稍微更新一下CSS。检查 jsfiddle 链接以获取实际演示。

JsFiddlehttp://jsfiddle.net/469zV/414/


1
投票

带有jquery ui datepicker的放大弹出窗口(启用changemonth和changeyear)

试试这个代码

// Added to make calendar drop downs work properly
$.magnificPopup.instance._onFocusIn = function(e) {

    if( $(e.target).hasClass('ui-datepicker-month') ) {
        return true;
    }
    if( $(e.target).hasClass('ui-datepicker-year') ) {
        return true;
    }
    $.magnificPopup.proto._onFocusIn.call(this,e);
};

1
投票

在现代 - 2018 年,使用 Bootstrap 4.1 - 我能够通过简单地将

focus : false
传递给模态构造函数来解决这个问题。


1
投票

试试这个:

beforeShow: function(el, dp) {
    uidp = $('#ui-datepicker-div').addClass('forced-display-none').detach();
    $(el).parent().append(uidp);
    setTimeout(function(){$(uidp).css({'position':'relative','left':'0px','top':'0px'}).removeClass('forced-display-none')},200);
}

将强制显示-无定义为:

.forced-display-none {display: none !important;}

1
投票

我给出了嵌套在 bootstrap 模式中的 jquery daterangepicker 的解决方案(问题:选择器月/年没有出现在 FF 浏览器上)。解决方案是添加“parentEl”选项,指示要初始化日期范围选择器的模式:

 $('#example-date-input').daterangepicker({
            parentEl: $('.modal-where-daterangepicker-should-be-nested'),
            .....
 });

0
投票

就我而言,我认为日期选择器失败了,但真正发生的是之前引用的日期选择器(bootstrap-datepicker.js)优先于 jquery-ui 日期选择器。


0
投票

上面的答案对我使用 Bootstrap 5.2 不起作用,但这个答案可以:https://stackoverflow.com/a/71738702

© www.soinside.com 2019 - 2024. All rights reserved.