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

Posted

技术标签:

【中文标题】Jquery Ui Datepicker 月/年下拉菜单在最新的 Firefox 中的弹出窗口中不起作用【英文标题】:Jquery Ui Datepicker month/year dropdown is not working in popup in latest firefox 【发布时间】:2015-07-05 10:34:03 【问题描述】:

不知何故,我的 jQuery UI Datepicker Month/Year Dropdown 在最新的 firefox 的任何弹出窗口中都不起作用。

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

这是因为模态强制关注自身。这是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

【讨论】:

即使我不使用引导程序,我也遇到了问题。关于如何解决它的任何想法? jQuery v1.12.4 和 jQuery UI v1.12.1 这给了我TypeError: $.fn.modal is undefined【参考方案2】:

我不得不使用

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

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

【讨论】:

它节省了我的时间:) 很高兴它有帮助:) 最近尝试了FF,不知道,日期选择器不会改变FF中的月份/年份,但是这个解决方案,(第二部分)就像一个魅力!!【参考方案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 链接以获取实际演示。

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

【讨论】:

就我而言,此解决方案有效,但会干扰对话框外的其他日期选择器。不知何故,在我打开模式对话框中的一个之后,我无法再打开另一个日期选择器。 在这种情况下,您需要在应用更改时保持选择性,例如 $("#datepicker.your-special-class").datepicker( beforeShow: function(el, dp) $(el).parent().append($('#ui-datepicker-div.your-special-class')); $('#ui-datepicker-div.your-special-class').hide(); 不幸的是,它仍然不起作用。不知何故,$('#ui-datepicker-div.your-special-class') 不存在。即使我已将 your-special-class 类设置为我的日期选择器输入。 我也用你提供的 JsFiddle 试过了:jsfiddle.net/vdpgf3jm/1【参考方案4】:

带有 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);
;

【讨论】:

我应该把这个放在哪里?内部 magnificPopup() 函数回调?【参考方案5】:

在现代——2018 年,使用 Bootstrap 4.1——我能够通过简单地将 focus : false 传递给模态构造函数来解决这个问题。

【讨论】:

【参考方案6】:

试试这个:

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;

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

我为嵌套在引导模式中的 jquery daterangepicker 提供了一个解决方案(问题:选择器月份/年份未出现在 FF 浏览器上)。解决方案是添加“parentEl”选项,指示要在其中初始化 daterangepicker 的模式:

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

【讨论】:

以上是关于Jquery Ui Datepicker 月/年下拉菜单在最新的 Firefox 中的弹出窗口中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery日期选择插件 jQuery UI Datepicker 如何定纪念日

在 jQuery UI Datepicker 中禁用未来日期

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

jQuery ui datepicker,从onSelect获取星期几

jQuery UI Datepicker 仅启用数组中的特定日期

jquery ui中的datepicker日期选择,怎么样将当前日期之前的时间设为设为不能选中