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

时间:2015-04-27 05:28:07

标签: javascript jquery html jquery-ui datepicker

不知怎的,我的jQuery UI Datepicker月/年下拉列表在最新的firefox中没有任何弹出窗口。

当我点击月份或年份下拉列表时,不会显示选项列表。

这是我的Popup& Datepicker代码:

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

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

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

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

7 个答案:

答案 0 :(得分:17)

这是因为模态强调对自身的关注。如上所述here,这是一个解决方案。将以下脚本添加到js文件中。那就是它。

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

参考:Twitter bootstrap multiple modal error

// 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

答案 1 :(得分:9)

我必须使用

$.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'
});

现在我可以选择年份:)

答案 2 :(得分:1)

jquery ui datepicker的magnific popup(启用了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);
};

答案 3 :(得分:1)

理想的解决方案是在模态对话框中移动日期选择器弹出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链接以获取实际演示。

JsFiddle http://jsfiddle.net/469zV/414/

答案 4 :(得分:1)

在现代时代-2018年,使用Bootstrap 4.1-我能够通过将focus : false传递给模式构造函数来解决此问题。

答案 5 :(得分: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;}

答案 6 :(得分:0)

在我的情况下,我认为datepicker失败了,但真正发生的是先前引用的datepicker(bootstrap-datepicker.js)优先于jquery-ui datepicker。